質問
私はコマンドを使用して matlab でデバッグするのが好きです。いくつかの質問:
- スタックを選択した場合、dbup および dbdown を使用してスタックを次々に移動するのではなく、特定のスタックに直接ジャンプすることはできますか?
- 中央のスタックにジャンプした後、いくつかのコマンドを実行すると、自動的に最も内側のスタックに戻るのはなぜですか?別のスタックに移動するコマンドを発行するまで、中央のスタックに留まることはできますか?
解決
1)。エディタを使用して、エディタのツールバーが表示されていている場合は、ショーあなたの全体コールスタックは、あなたが任意のレベルにジャンプすることができますことを「スタック」ドロップダウンがあります。あなたはそのドロップダウンで何を見て、dbdown一緒に/ nのレベルの関数dbupをハックすることができるかもしれませんが、デバッガの制御が原因スクリプト作成のために使用しているデバッガとM-コードの相互作用に非常に難しいスクリプトへのMATLABからですます。
2)それはそれはあなたが期待するようにあなたは、からそれを発行したスタックレベルを返すべき完了したとき、あなたは、「K >>」デバッガプロンプトからコマンドを発行する場合。あなたはまだ、コードの一番下のレベルで設定されたブレークポイントを持っていますか?たぶん、あなたは実際には二デバッガ「K >>」ネストされた呼び出しスタック内のブレークポイントからのプロンプトを見ています。あなたは、基本的に複数のネストされたデバッガのコンテキストを持つことができます。
例えば、
function f1
f2();
function f2()
f3();
function f3()
f4();
function f4()
disp('Hello world');
あなたはこのようなデバッガでそれを投げる場合は、、あなた自身がオリジナルのデバッガ・セッションから起動されたコールスタックの一番下にブレークポイントにヒットします。
>> dbstop in f1 at 8
>> f1()
8 disp('Hello world');
K>> dbup
In workspace belonging to f1>f3 at 6
K>> dbup
In workspace belonging to f1>f2 at 4
K>> f1()
8 disp('Hello world');
K>> dbstack
> In f1>f4 at 8
In f1>f3 at 6
In f1>f2 at 4
In f1 at 2
In f1>f4 at 8
In f1>f3 at 6
In f1>f2 at 4
In f1 at 2
K>>
(ネストされたデバッガのセッションから抜け出す)関数dbquitを行うバックあなたがオフに左に元のコールスタックの中央にあなたを取得ます。
K>> dbquit
K>> dbstack
In f1>f4 at 8
In f1>f3 at 6
> In f1>f2 at 4
In f1 at 2
K>>
あなたはブレークポイントが最初に関わらず、Kフレームスタック何の、育ったコールスタックの下から再開しますあなたの「K >>」は、制御フロー>>のうちdbcont場合は見ています。実行されているあなたは、メインラインコードの制御フローを変更するためにデバッガを使用することはできません。