5

カスタム条件を作成する方法について人々が議論したことは知っています( MATLAB で dbstop をカスタマイズdbstopするなど) 。

しかし、私は通常のプロセスを使用しており、dbstop if error(別のプロセスから) matlab プロセスが現在デバッグ状態 ( K>>) にあるか、正常に実行されているかを知りたいと考えています。

カスタムdbstopハンドラー関数があれば、これを行うことができます。しかし、通常の .NET と同様にハンズオン デバッグを実行できるようにしたいと考えていますdbstop if error

外部から matlab の状態を検出する可能性が他にある場合 ( >>vs K>>)、私も嬉しいです!

アイデアを教えてください;)

4

4 に答える 4

4

matlab のタイマーは、別のスレッドを生成して待機することができ、現在の matlab インスタンスの外から見る必要があるという問題を回避できます。タイマーを設定して、デバッグ モードがアクティブかどうか、および何かを実行するかどうかを確認できます。

デバッグモードがアクティブかどうかを確認し、アクティブな場合は何かを行う関数の例:

function mycallbackfunction(~,~)
        if feature('IsDebugMode') % undocumented thanks to CatzLoveJazz

        load handel
        sound(y,Fs)

前の 2 行は注目を集める例です。その他の可能性として、 を使用beepしたり、ファイルに書き込んだり、任意のコマンドや関数を実行したりできます。

        evalin('base','stop(timerHandle)') % stop the timer
    end
end

この関数を変更して、「アテンション グラブ」を 1 回評価し、デバッグ モードがアクティブでなくなったらリセットすることができます。現在、タイマーを停止してから手動で再起動することに依存しています。

(注: 以前のバージョンには else がありましたが、ワークスペースがビジー状態の間は実行されないため、これは冗長でした)

次に、タイマー オブジェクトを作成します。

timerTic=4; % how often the timer checks

timerHandle = timer();
timerHandle.startDelay = timerTic;
timerHandle.Period = timerTic;
timerHandle.ExecutionMode = 'fixedRate';
timerHandle.TasksToExecute = inf;
timerHandle.TimerFcn = @mycallbackfunction;

タイマー呼び出しを開始する

start(timerHandle)

注意を引くラインを実行した後、タイマーは自動的に停止します。デバッグ モードに入らない場合、タイマーは動作し続けるため、手動で停止する必要があります。stop(timerHandle)

変数delete(timerHandle)をクリアする前に、終了したら実行してオブジェクトを削除することを忘れないでくださいtimerHandle

于 2014-03-28T17:25:58.687 に答える
3

あなたが求めているものを正確に達成する方法がわかりません。

ただし、おそらく次のことができます。

  1. try-catch例外を (ブロックで) キャッチします。
  2. ブロック内で、catch任意の外部プロセスを開始するか、メッセージを送信して、MATLAB に問題があることを示します (キャッチされた例外の詳細がメッセージに含まれている可能性があります)。
  3. 即座にrethrow(またはthrow、またはthrowAsCaller) 例外がキャッチされました。
  4. dbstop if error再スローされたエラーでのみデバッグ モードに入るために使用します。

このようにして、エラーを通知する外部プロセスを取得し、デバッグ モードに入ってそれを調べることができるはずです。

于 2014-03-27T16:11:36.353 に答える
0

私の推測では、エラーが発生したときに matlab に何かをさせ、それでもそれをキャッチする方法を探していると思います。次の関数のようなセットアップを試してください。

function testscript(s)
try
x=2;
x=y;
catch err
    beep %Or send a signal to an other program
    rethrow(err) %This will trigger dbstop if error
end
end

エラーをキャッチしても、どの値xが含まれているかを確認できることに注意してください。

于 2014-03-28T15:13:41.200 に答える