无限递归发生时处理崩溃

时间:2013-01-06 11:57:22

标签: matlab recursion stack-overflow

无限递归发生时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

有没有办法处理无限循环中忽略的崩溃?

1 个答案:

答案 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()来不执行任何操作,因此性能不会受到影响,并且可以进行调试可以插入很多地方而不影响性能。如果您需要进行其他调试,只需重新打开此功能,然后根据需要进行修改以跟踪特定问题 - 您知道它在您的代码中无处不在。