当无限递归发生时Matlab崩溃,如下面的代码
文件: x.m
function x
y;
end
文件: y.m
function y
x;
end
文件: script.m
x;
如果脚本脚本。M执行matlab崩溃,必须重新启动。
即使我使用了try-catch,它仍然会崩溃:
文件:脚本。m
try
x;
catch
error('stack-overflow');
end
是否有办法处理这种从无限循环中省略的崩溃?
作为一个快速技巧,您可以执行
global counter;
global RecursionDepth;
counter = 0;
RecursionDepth = 1000;
在代码开头的某个地方,那么你可以使用
function IncrementCounterAndCheckDepth()
global counter;
global RecursionDepth;
counter = counter+1;
if counter > RecursionDepth
error('stack-overflow');
else
disp(RecursionDepth);
end;
return;
,并在必要时插入它以检查递归。你甚至可以添加额外的信息/传递一些参数给它来改善你的调试,一旦你完成了调试,你可以删除所有的全局变量,并定义IncrementCounterAndCheckDepth()不做任何事情,所以性能不会受到影响,并且为了调试,它可以插入很多地方而不会影响性能。如果需要进行额外的调试,只需重新打开此函数并根据需要修改它以跟踪特定问题—您知道它在代码中无处不在。