5

現在、ネストされた try-catch ステートメントを使用してコードをデバッグしています。

コマンドでエラーを簡単に処理できますdbstopが、コードを見てプログラムの実行を停止するdbquitたびに、ネスト レベルごとに 1 回入力する必要があります。

これは非常に面倒なので、デバッグが完了したらすべてのプログラムのデバッグを本当に停止する解決策を探しています。

コードを呼び出す方法の例を次に示します。

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

私は何を試しましたか?

  • 2 回呼び出すスクリプトまたは関数を使用しようとしましたがdbquit、これはdbquit1 回しか実行されません。
  • 使ってみ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

これは、機能するはずの方法ではありません。try/catch ステートメントがどれだけ深くネストされていて、どのブレークポイントがまだ設定されているかに関係なく、シングルdbquitはデバッガーから完全に抜け出すはずです。

古いバージョンの Matlab を実行していますか? R2009b より前のバージョンの Matlab に関連する既知のバグがあり、この動作を引き起こす可能性があるようです。dbstop if caught error古いバージョンを使用している場合は、アップグレードできます。

バージョンに関係dbstop if all errorなく、個別のdbstop if erroranddbstop if caught errorステートメントの代わりに実行して、動作が変わるかどうかを確認してください。

また、「K>>」プロンプト内から複数の機能を実行していて、ネストされたデバッガー セッションが終了している可能性もあると推測していましたが、dbquit('all')そのケースに対処する必要がありました。

于 2013-06-08T04:43:15.903 に答える