友達 タイトルの通り、squeak4.1でデバッグ中、「デバッグする」メニューが強力で、Proceed、Restart、Into、Over、Thruなどのボタンがあり、Intoボタンに入るたびにトレースできます特定のコードに、しかし、Over と Through ボタンの違いは何ですか?
1 に答える
Squeak デバッガーは、最初は少し戸惑うかもしれません。そのさまざまな部分を調べてみましょう。
コンテキスト スタック
デバッガー ウィンドウの上部にあるリストは、コンテキスト スタックまたは呼び出しスタックを表しています。コンテキストは、アクティブなブロックまたはメソッドの状態です。
スタックの最上位のコンテキストは、現在実行中のコンテキストです。通常、コンテキストから戻った後、プログラムの実行はその下のコンテキスト (つまり、送信者のコンテキスト) で再開されます。
コードペイン
コンテキスト スタックで強調表示されているメソッドのコードは、デバッガー ウィンドウの中央にあるコード ペインに表示され、そのメソッドの現在のステートメントが強調表示されます。
インスタンス変数とコンテキスト変数
デバッガー ウィンドウの下部には、変数の表示に使用される 2 つのウォッチリストがあります。
左側のリストには、現在のメソッドのレシーバーのすべてのインスタンス変数が含まれています。右側のリストには、現在のコンテキストのすべての一時変数が含まれています。
これらのリストで変数を選択すると、その値がリストの右側のスペースに表示されます。
デバッガーのボタン
デバッガーがこの画像に示されている状態にあると仮定した場合のデバッガー ボタンの動作は次のとおりです。
続行:デバッガを閉じて続行します。
プログラムの実行を通常どおり続行します。ここでトランスクリプトに「12345」と表示し、ビープ音を鳴らし、に戻る#someMethod
...
再起動:コンテキストを最初にリセットします。
現在のスタック コンテキストの実行を再開し、最初のメッセージ送信 (ここではto: 5
) を再び強調表示します。
Into:メッセージ送信にステップ
イン メソッド (ここでは ) 内にステップ インし、その内部で送信される最初のメッセージを強調表示します。Interval>>do:
Over:メッセージ送信のステップオーバー
強調表示されたメッセージ送信 ( ) を
実行し、次のメッセージ送信 ( #do:
) を強調表示します#beep
。
スルー:ブロックにステップ インする コードが現在表示されているメソッドの一部であるコンテキストに入るときにデバッガーも停止することを
除いて、上記と
同様にコードをステップ スルーします。ここでは、次のことを意味します。
- 呼び出し
[:each | Transcript show: each]
全体を一度にステップオーバーするのではなく、 ) ブロック内で実行が停止します。#do:
- ブロックから戻ると、デバッガーは、ブロックが評価された場所 (つまり、内部
Interval>>do:
) に戻るのではなく、このメソッドの次のポイントにステップアップします。
ifTrue: []
やのようないくつかの単純なブロック構成ifFalse: []
は、実際のメッセージ送信としてコンパイルされず、OverまたはThroughが使用されているかどうかにかかわらず、デバッガーは常にそのようなブロック内にステップ インします。
フル スタック:フル スタック
を表示 スタック ペインにさらにフレームを表示します。
ここまで実行: 選択範囲まで実行
たとえば、このメソッドでテキスト「ビープ」#beep
を強調表示すると、プログラムが再開され、メッセージが送信される直前に停止します。
場所:現在の PC 範囲を選択
します カーソルが移動した場合は、コード ペインで送信される次のメッセージを再強調表示します (ここではdo: [:each |Transcript show: each]
)。
その他の機能
Squeak デバッガーを使用すると、次のこともできます。
- DNU を取得したときに[作成] ボタンをクリックして不足しているメソッドを簡単に作成する
- デバッガーでコードを直接編集できます
- コード内のdo it (cmd-a) コマンドとprint it (cmd-p) コマンドを使用して、コードのビットを評価します。
- スタック、変数リスト、コードペインのコンテキストメニューからブラウザーまたはインスペクターを開きます