据我所知,在 Matlab 中,没有有条件地捕获异常的好方法(如果我错了,请纠正我)。唯一的方法是捕获异常,检查标识符,如果无法处理此特定错误,则重新抛出错误。这是可以接受的,虽然不方便。但是,当我使用 Matlabs 时dbstop if error
,我最终会遇到问题ME.rethrow()
。然后我无法回到导致原始错误dbup
的地方。
function test_excc
try
sub_test()
catch ME
if strcmp(ME.identifier, 'test:notsobad')
fprintf(1, 'Fine\n');
else
ME.rethrow();
end
end
end
function sub_test
sub_sub_test();
end
function sub_sub_test()
if rand>0.5
error('test:error', 'Noooo!');
else
error('test:notsobad', 'That''OK');
end
end
示例用法:
>> test_excc()
Error using test_excc>sub_sub_test (line 21)
Noooo!
Error in test_excc>sub_test (line 16)
sub_sub_test();
Error in test_excc (line 4)
sub_test()
9 ME.rethrow();
K>> dbstack
> In test_excc at 9
尽管 Matlab 桌面环境将整个堆栈跟踪打印回sub_sub_test
,但调试器并没有让我有可能在此函数中向上堆栈跟踪和调试。
我知道dbstop if caught error
。但是,这将调试到任何捕获的错误,如果软件大量使用异常,这可能会很多。我只想在未捕获的错误上停止,但我想在产生错误的地方停止——而不是在重新抛出错误的地方。
我的问题:
- 在 Matlab 中,如何有条件地捕获错误(基于错误标识符)并调试到最初引发错误的地方?