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で、(エラー識別子に基づいて)条件付きでエラーをキャッチし、エラーが最初にスローされた場所にデバッグするにはどうすればよいですか?