Matlab:打开和关闭try / catch进行调试

时间:2013-12-09 20:40:48

标签: matlab debugging if-statement try-catch

我正在使用try-catch语句进行类似以下的冗长计算:

for i=1:1000
    try 
        %do a lot of stuff
    catch me
        sendmail('foo@bar.bz', 'Error in Matlab', parse_to_string(me));
    end
end

当我在编写代码时,我不想跳入catch语句,因为我喜欢Matlabs dbstop if error功能。 我知道可以使用dbstop if all error来避免跳过catch语句(我在这里找到了http://www.mathworks.com/matlabcentral/newsreader/view_thread/102907。)

但问题是Matlab有很多内置函数可以抛出由其他内置函数捕获和处理的错误。我只想停止由我造成的错误。

我的方法是使用类似于

的声明
global debugging; % set from outside my function as global variable
for i=1:1000
    if  ~debugging 
        try 
    end

        %do a lot of stuff

    if  ~debugging
        catch me
            sendmail('foo@bar.bz', 'Error in Matlab', parse_to_string(me));
        end
    end 
end

这不起作用,因为Matlab没有看到try和catch属于彼此。

调试时是否有更好的方法来处理try/catch语句?我一直在评论try/catch,但这非常烦人且麻烦。

3 个答案:

答案 0 :(得分:3)

您正在寻找的解决方案是dbstop if caught error

在我发现之前,使用try catch块调试代码总是让我发疯。

答案 1 :(得分:1)

for i=1:1000
    try 
        %do a lot of stuff
    catch me
        if ~debugging
             sendmail('foo@bar.bz', 'Error in Matlab', parse_to_string(me));
        else
             rethrow(me)
        end
    end
end

此代码应符合您的要求。

答案 2 :(得分:0)

您可以在Matlab documentation中看到,dbclear all删除了所有MATLAB®代码文件中的所有断点,并为错误,捕获的错误,捕获的错误标识符,警告,警告标识符和naninf。

如果您需要删除某个文件中的所有断点,则可以使用dbclear in mFilePath,并且始终可以使用dbstatus来检查当前设置。

正如@ dennis-jaheruddin提到的,dbstop if caught error可用于在try / catch块的try部分内发生的运行时错误。如果要清除特定错误的断点集,请指定消息ID。