Я запускаю следующую команду в интерактивной консоли MATLAB:
>> foo = [1 inf];
>> dbstop if naninf
>> foo
Теперь я получаю странное поведение: MATLAB, похоже, разбивается на два разных файла, но на самом деле не останавливает выполнение.Это довольно медленно, потому что редактор несколько раз переключается между этими файлами, Ctrl + C ничего не делает.Вывод:
481 end
20 if ~isfloat(value)
20 if ~isfloat(value)
399 if numel(var) > numelLimit
20 if ~isfloat(value)
20 if ~isfloat(value)
399 if numel(var) > numelLimit
20 if ~isfloat(value)
20 if ~isfloat(value)
399 if numel(var) > numelLimit
...
...
затем он наконец останавливается с приглашением отладки с очень длинным (рекурсивным) стеком, например:
dbstack
In codetools/private/dataviewerhelper>upconvertIntegralType at 20
In codetools/private/dataviewerhelper at 9
In workspacefunc>createComplexScalar at 271
> In workspacefunc>num2complex at 241
In workspacefunc>getShortValueObjectJ at 230
In workspacefunc>getShortValueObjectsJ at 349
In workspacefunc at 21
In codetools/private/dataviewerhelper>upconvertIntegralType at 20
In codetools/private/dataviewerhelper at 9
In workspacefunc>createComplexScalar at 271
In workspacefunc>num2complex at 241
In workspacefunc>getShortValueObjectJ at 230
In workspacefunc>getShortValueObjectsJ at 349
In workspacefunc at 21
In workspacefunc>getStatObjectsJ at 399
In workspacefunc at 27
In codetools/private/dataviewerhelper>upconvertIntegralType at 20
In codetools/private/dataviewerhelper at 9
In workspacefunc>createComplexScalar at 271
In workspacefunc>num2complex at 241
In workspacefunc>getShortValueObjectJ at 230
In workspacefunc>getShortValueObjectsJ at 349
In workspacefunc at 21
In codetools/private/dataviewerhelper>upconvertIntegralType at 20
In codetools/private/dataviewerhelper at 9
In workspacefunc>createComplexScalar at 271
In workspacefunc>num2complex at 241
In workspacefunc>getShortValueObjectJ at 230
In workspacefunc>getShortValueObjectsJ at 349
In workspacefunc at 21
In workspacefunc>getStatObjectsJ at 399
In workspacefunc at 27
...
...
В моей настоящей программе я пытаюсь отладитьЯ получаю то же самое, но еще хуже, так что иногда я сталкиваюсь с ошибкой предела рекурсии и прерыванием, иногда MATLAB просто полностью вылетает.Я действительно хотел бы иметь возможность использовать dbstop if naninf
, но это делает это практически невозможным, и это меня огорчает.Любой совет?
Использование 64-разрядной версии MATLAB 2009b в Linux.
Спасибо!
Редактировать:
Я только что попробовал это на 32-битной Linux MATLAB 2007b:
>> foo = [1 inf]
foo =
1 Inf
>> dbstop if naninf
>> foo
foo =
1 Inf
>> foo = [1 inf]
foo =
1 Inf
>>
>> t = foo(2)
t =
Inf
Так вотdbstop, если naninf, похоже, ничего не делает, когда намеренно присваивает inf переменной. В документах сказано:
dbstop, если naninf или dbstop, если infnan останавливает выполнение, когда любой последующий программный файл MATLAB создает бесконечное значение (Inf) или значение, которое не являетсячисло (NaN) в результате оператора, вызова функции или скалярного присваивания, переводя MATLAB в режим отладки, ставится на паузу сразу после строки, где обнаружен Inf или NaN.
Не должно ли это попастьдаже когда я намеренно назначаю inf переменной (как выше t = foo (2) или s = inf) или что подразумевается под "скалярным присваиванием"?