无限递归发生时Matlab崩溃,如下面的代码
档案: x.m
function x
y;
end
档案: y.m
function y
x;
end
文件: script.m
x;
如果脚本script.m执行了matlab崩溃,则必须重新启动。
即使我使用了try-catch,它仍然会崩溃:
文件: script.m
try
x;
catch
error('stack-overflow');
end
有没有办法处理无限循环中忽略的崩溃?
答案 0 :(得分:1)
作为一个快速的技巧,你可以做到
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()来不执行任何操作,因此性能不会受到影响,并且可以进行调试可以插入很多地方而不影响性能。如果您需要进行其他调试,只需重新打开此功能,然后根据需要进行修改以跟踪特定问题 - 您知道它在您的代码中无处不在。