2013-06-05 4 views
5

現在、ネストされたtry-catchステートメントを使用してコードをデバッグしています。ネストされた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を呼び出す関数を使用してみました。
  • 私は、私はコード内のtry-catch文を削除したくない効果なし

注意して、dbquit('all')を使用してみました。

+0

この動作は驚くべきことです。 'dbquit'は、try/catchがどれくらい深くネストされているかにかかわらず、デバッガとコードの実行を完全に終了します。深くネストされたtry/catchで頻繁にやります。 Matlabのどのバージョンを実行していますか? –

答えて

2

あなたはほかにブレークポイントを使用している場合、これはまた、明確なすべてのブレークポイントあなたは、したがって、手動で設定し、あなたではなく使用する必要があるだろうということ、しかし、dbquit

dbclear all; dbquit; 

注意を使用する前に、dbclearを呼び出すことができます

dbclear if error; dbclear if caught error; dbquit; 
+1

ブレークポイントを使用していてもプラスの場合は、キャッチエラーの場合はdbstopを再入力する必要があります。いつもdbstopエラー 'すべての時間... –

+0

@RodyOldenhuisはい、あなたは正しいです。それに気づいてくれてありがとう。私の更新された答えを見てください。 –

+0

実際には、この問題を回避するには、エラーの場合は 'dbclear 'というショートカットを1つ使用します。キャッチされたエラーの場合はdbclear; dbquit;と2回目は 'dbstop if catch error; dbstop if error;'それはちょうど2回のクリックです。 –

1

これは動作する方法ではありません。 1つのdbquitは、try/catchステートメントがどれくらい深く入れ子になっていて、どのブレークポイントがまだ設定されているかにかかわらず、デバッガから完全に抜け出すはずです。

旧バージョンのMatlabを使用していますか?この現象を引き起こす可能性があると思われるMatlabのR2009b以前のバージョンにはknown bug related to dbstop if caught errorがあります。古いバージョンを使用している場合はアップグレードできます。

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

「K >>」プロンプトから複数の機能を実行していて、ネストされたデバッガセッションで終わっているのではないかと推測しましたが、dbquit('all')で処理してください。

+0

私が使っているバージョンはかなり最近ですが、私はそうは思わない問題。私の推測は、実際にネストされたセッションのようなものでも、エラー(dbstop catch if error'で捕捉されたエラー)を最初に捕捉し、実際には 'dbquit'を使ってエラーを作成し、' dbstop if error'条件をトリガします。私はチャンスがあるときあなたの解決策を試してみます。 –

関連する問題