5

我目前正在使用嵌套的 try-catch 语句调试代码。

我可以通过命令轻松处理错误dbstop,但是每次查看代码并想停止运行程序时,我必须dbquit为每个嵌套级别输入一次。

由于这很烦人,我正在寻找一种解决方案,以便在完成调试后真正停止调试所有程序。

这是我如何调用代码的示例:

dbstop if error
dbstop if caught error
mytestmain

下面是函数的外观示例(子函数可能位于也可能不在不同的 .m 文件中)

function mytestmain 
try
    mytestsub
catch
end

%% Definition of subfunction
function mytestsub
try
    a=b;%generate an error as b is not defined
catch
end

我尝试了什么?

  • 我尝试使用调用dbquit两次的脚本或函数,但这只会执行dbquit一次。
  • 我尝试使用dbquit('all'),但没有效果

请注意,我不想删除代码中的 try-catch 语句。

4

2 回答 2

2

您可以dbclear在使用前致电dbquit

dbclear all; dbquit;

但是请注意,这也会清除您手动设置的所有断点,因此,如果您另外使用断点,您应该使用

dbclear if error; dbclear if caught error; dbquit;
于 2013-06-05T11:47:22.797 回答
1

这不是它应该如何工作的。dbquit无论你的 try/catch 语句嵌套多深,以及仍然设置了哪些断点,一个单曲都应该让你完全脱离调试器。

您正在运行旧版本的 Matlab 吗?在 R2009b 之前的 Matlab 版本中存在一个已知错误dbstop if caught error,听起来可能会导致这种行为。如果您使用的是旧版本,则可以升级。

不管你的版本是什么,试着做dbstop if all error而不是单独的dbstop if errordbstop if caught error语句,看看行为是否改变。

我也猜到了,也许您正在“K>>”提示符中运行多个函数并以嵌套调试器会话结束,但dbquit('all')您确实应该处理这种情况。

于 2013-06-08T04:43:15.903 回答