我在交互式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
...
...
dbstop if naninf
但这让我很不可能,这让我很难过。有什么建议吗?
在Linux上使用matlab2009b64位。
编辑:
我刚刚在MATLAB 2007b 32位Linux上试过:
>> 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如果在故意将inf赋给变量时,naninf似乎没有做任何事情。
The docs say:
dbstop if naninf或dbstop if infnan在随后运行的任何MATLAB程序文件由于运算符、函数调用或标量赋值而产生无限值(Inf)或非数字值(NaN)时停止执行,使MATLAB处于调试模式,在遇到Inf或NaN的行后立即暂停。
即使我故意将inf赋值给一个变量(如上面的t=foo(2)或s=inf)或者“标量赋值”是什么意思,这难道不应该发生吗?