我正在使用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
,但这非常烦人且麻烦。
答案 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。