我在MATLAB文件中有一个try / catch语句,它调用一堆嵌套函数。简单地说,try / catch在'top'级别运行,迭代一个我调用函数的文件列表。
for i=1:length(FILELIST)
try
dosomething(FILELIST(i)
catch
disp(exception.message)
rethrow(exception)
end
我的问题是,dosomething()有很多子功能dosomethingchild()如何访问调试工作区?我必须删除所有父项中的try / catch语句才能访问调试工作区,并将'STop if errors / warnings'设置为full。
try / catch使得调试变得更加困难,但是我想保留它,因为有时代码会因某些文件的性质而失败,因为文件的性质......而不是代码本身。
提前致谢。
答案 0 :(得分:4)
只需删除try..catch
。由于您只是显示并重新抛出错误,而没有实际捕获任何特定内容,因此对于由文件性质引起的错误而言,不可行的生产代码是不可行的。它将与没有try..catch
的情况相同,因此在发生错误后它将停止执行。
启用stop if error
后,它将在您的错误处理程序中停止,这在您已经注意到的情况下是无用的。从那里返回被调用函数的工作区是不可能的,因为这些工作区已经关闭(调用已经返回)。
在现实生活中,您也可以与dbstop if caught error
一起尝试try..catch
,但在这种情况下,我建议要么摆脱try..catch
或至少让它捕获特定的错误。您也可能希望在发生时立即捕获(特定)错误;离实际发生的距离越远,特定错误通常就会越少。
答案 1 :(得分:1)
为什么不将keyboard
添加到catch语句中,并检查代码失败时发生的情况。
答案 2 :(得分:0)
Generall我同意Egon你的try / catch块根本没用。但是,对于您的调试案例,它可能不是最糟糕的主意。我建议调试这段代码:
dbstop if error
切换到调试模式。或者,在disp(execption.message)
。doSomething()
函数中放置一个断点,尽可能接近错误(错误给你调用堆栈,所以你应该非常接近),然后从控制台再次手动执行doSomething()
。它将在您的断点处停止,然后您可以单步执行(快捷键:F10)或进入子功能(步骤F11)。