ブレークポイント
ユーザーインタフェースは、スタンドアロンプログラムの開発とデバッグの支援用として、ブレークポイント機能を備えています。(オペレーティングシステムのもとで実行されるプログラムは、一般的にこの機能は使用しないで、オペレーティングシステムのもとで動作するほかのデバッガを使用します。) ブレークポイント機能では、テストプログラムを停止させたい場所で停止することができます。プログラムの実行が停止した後は、レジスタまたはメモリーを調べたり、変更できるほか、ブレークポイントを新たに設定またはクリアすることができます。プログラムの実行は go コマンドで再開できます。
表 6-4に、プログラム実行の制御、監視用のブレークポイントコマンドを示します
表 6-4 ブレークポイントコマンド
コマンド
|
スタックダイアグラム
|
説明
|
+bp |
( addr -- )
|
指定されたアドレスにブレークポイントを追加します。
|
-bp |
( addr -- )
|
指定されたアドレスからブレークポイントを削除します。
|
--bp |
( -- )
|
最後に設定されたブレークポイントを削除します。
|
.bp |
( -- )
|
現在設定されているすべてのブレークポイントを表示します。
|
.breakpoint |
( -- )
|
ブレークポイントが発生したときに、指定された処理を実行します。このワードは、実行させたい任意の処理を実行するように変更できます。たとえば、ブレークポイントごとにレジスタを表示するには、 ['] .registers to .breakpoint と入力します。デフォルト処理は .instruction です。複数の処理を実行させるには、実行させたいすべての処理を呼び出す 1 つの定義を作成し、次にそのワードを .breakpoint に読み込みます。
|
.instruction |
( -- )
|
最後に現れたブレークポイントのアドレスとオペコードを表示します。
|
.step |
( -- )
|
シングルステップで実行になったときに指定された処理を実行します (.breakpoint を参照)。
|
bpoff |
( -- )
|
すべてのブレークポイントを削除します。
|
finish-loop |
( -- )
|
このループの終わりまで実行します。
|
go |
( -- )
|
ブレークポイントから処理を継続します。これを利用して、 go を発行する前にプロセッサのプログラムカウンタを設定することにより、任意のアドレスに移ることができます。
|
gos |
( n -- )
|
go を n 回実行します。
|
hop |
( -- )
|
(step コマンドに似ています。) サブルーチン呼び出しを 1 つの命令として取り扱います。
|
hops |
( n -- )
|
hop を n 回実行します。
|
return |
( -- )
|
このサブルーチンの終わりまで実行します。
|
returnl |
( -- )
|
このリーフサブルーチンの終わりまで実行します。
|
skip |
( -- )
|
現在の命令をスキップします (実行しません)。
|
step |
( -- )
|
1 命令を 1 つずつ実行します。
|
steps |
( n -- )
|
step を n 回実行します。
|
till |
( addr -- )
|
指定されたアドレスが現れるまで実行します。+bp go と等価です。
|
ブレークポイントを使用してプログラムをデバッグするには、次の手順に従います。
-
テストプログラムをメモリーへ読み込みます。
-
詳細は、第 5 章「プログラムの読み込みと実行」を参照してください。各レジスタの値が自動的に初期化されます。
-
(省略可能) ダウンロードされたプログラムを逆アセンブルして、ファイルが正しく読み込まれているかどうかを確認します。
-
step コマンドを使用してテストプログラムを 1 命令ずつ実行します。
-
さらに、ブレークポイントを設定し、実行したり (たとえば、addr +bp および go コマンドを実行します)、ほかの方法で実行することもできます。