Next: , Previous: , Up: Programming Tools   [Contents][Index]


6.26.9 Singlestep Debugger

シングルステップ・デバッガーは、 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 と入力する必要があります。 利用可能なキーの概要は以下のとおりです:

RET

Next; 次のワードを実行する(execute)。

n

Nest; 次のワードまで 1 ステップずつ辿る。

u

Unnest; デバッグを停止し(stop)、残りのワードを実行します(execute)。 ネスト(nest)機能でこのワードに到達した場合、 それを呼び出したワードでデバッグを続行します。

d

Done; デバッグを停止し(stop)、 残りを実行します(execute)。

s

Stop; 直ちに終了(abort)します。

このメカニズムを使用して大規模なアプリケーションをデバッグすることは、 あなたが関心のある部分が始まる前にプログラム内に非常に深くネストする必要があるため、 非常に困難です。 これにはとても時間がかかります。

これをより直接的に行うには、 BREAK: コマンドをあなたのソース・コードに追加します。 プログラムの実行が BREAK: に達すると、 シングル・ステップ・デバッガーが呼び出され、 上記すべての機能が利用できるようになります。

デバッグする部分が複数ある場合、 プログラムが現在どこで停止しているかを把握できると便利です。 これを行うには、 BREAK" string" コマンドを使用します。 これは BREAK: と同様に動作しますが、 「ブレークポイント」に到達したときに文字列が出力される点が異なります。

dbg ( "name" –  ) gforth-0.2 “dbg”
break: ( ) gforth-0.4 “break:”
break" ( ’ccc"’ –  ) gforth-0.4 “break"”