シングルステップ・デバッガーは、 gforth-itc
エンジンでのみ動作します(訳注: OSコマンドラインから gforth
ではなくて gforth-itc で起動する)。
新しいワードを作成するとき、 それが正しく動作するかどうかを確認する必要があることがよくあります。 これを行うには、dbg badword
と入力します。 デバッグ・セッションは以下のようになります:
: badword 0 DO i . LOOP ; ok 2 dbg badword : badword Scanning code... Nesting debugger ready! 400D4738 8049BC4 0 -> [ 2 ] 00002 00000 400D4740 8049F68 DO -> [ 0 ] 400D4744 804A0C8 i -> [ 1 ] 00000 400D4748 400C5E60 . -> 0 [ 0 ] 400D474C 8049D0C LOOP -> [ 0 ] 400D4744 804A0C8 i -> [ 1 ] 00001 400D4748 400C5E60 . -> 1 [ 0 ] 400D474C 8049D0C LOOP -> [ 0 ] 400D4758 804B384 ; -> ok
各行が 1 ステップです。 次のワードを実行して表示するには、 常に Return キーを押す必要があります。 次のワード全体を実行したくない場合は、
nest
に対して n と入力する必要があります。 利用可能なキーの概要は以下のとおりです:
Next; 次のワードを実行する(execute)。
Nest; 次のワードまで 1 ステップずつ辿る。
Unnest; デバッグを停止し(stop)、残りのワードを実行します(execute)。 ネスト(nest)機能でこのワードに到達した場合、 それを呼び出したワードでデバッグを続行します。
Done; デバッグを停止し(stop)、 残りを実行します(execute)。
Stop; 直ちに終了(abort)します。
このメカニズムを使用して大規模なアプリケーションをデバッグすることは、 あなたが関心のある部分が始まる前にプログラム内に非常に深くネストする必要があるため、 非常に困難です。 これにはとても時間がかかります。
これをより直接的に行うには、 BREAK:
コマンドをあなたのソース・コードに追加します。 プログラムの実行が BREAK:
に達すると、 シングル・ステップ・デバッガーが呼び出され、 上記すべての機能が利用できるようになります。
デバッグする部分が複数ある場合、 プログラムが現在どこで停止しているかを把握できると便利です。 これを行うには、 BREAK"
string"
コマンドを使用します。 これは BREAK:
と同様に動作しますが、
「ブレークポイント」に到達したときに文字列が出力される点が異なります。
dbg
( "name" – ) gforth-0.2 “dbg”
break:
( – ) gforth-0.4 “break:”
break"
( ’ccc"’ – ) gforth-0.4 “break"”