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


6.26.7 Debugging

編集/コンパイル/リンク/テスト の開発ループが遅い言語では、 デバッグを容易にするために高度な トレース/ステッピング デバッガが必要になる傾向があります。

高速コンパイル言語でのより良い(より速い)方法は、 適切に選択した場所に表示コード(printing code)を追加し、 プログラムを実行してその出力を見て、 問題が発生した箇所を確認し、 バグが見つかるまでさらに表示コード等を追加することです(訳注: C言語で言うところの printf デバッグすると言っている)。

debugs.fs で提供される単純なデバッグ支援機能は、 このスタイルのデバッグをサポートすることを目的としています。

~~ というワードは、 デバッグ情報(デフォルトではソースの場所とスタックの内容)を出力します。 これは簡単にソース・コードに挿入できます。 Emacs を使用している場合は、 削除も簡単です(Emacs Forth モードで C-x ~ を実行すると、 ~~ を ""(nothing) に query-replace します)。 defer ワード printdebugdata.debugline は、 ~~ の出力を制御します。 デフォルトのソース位置出力形式は Emacs のコンパイル・モードで適切に動作するため、 C-x ` を使用してソース・レベルでプログラムをステップ実行できます(ステップ実行デバッガーと比較した利点は、 任意の方向にステップ実行でき、 クラッシュが発生した場所や奇妙なデータが発生した箇所を知る事ができるということです)。

~~ ( ) gforth-0.2 “tilde-tilde”

~~ を記述したソース・コードの場所とスタックの内容を .debugline を使って出力します。

printdebugdata ( ) gforth-0.2 “print-debug-data”
.debugline ( nfile nline –  ) gforth-0.6 “print-debug-line”

nfile nline で示されるソース・コードの場所と追加のデバッグ情報を出力します。 デフォルトの .debugline は、 printdebugdata を使用して追加情報を出力します。

debug-fid ( – file-id  ) gforth-1.0 “File-id

デバッグ用の出力先。 デフォルトでは、 当該プロセスの stderr です。

~~ (およびアサート(assertions))は、 その出現後に同一ファイル内で marker が実行されると、 通常、 間違ったファイル名を出力します。 ~~ (およびアサート(assertions))は、 その出現前に同じファイル内で marker が実行されると、 ファイル名として「どこか」(somewhere)を出力します。

once ( ) gforth-1.0 “once”

once から THEN までの操作を 1 回だけ だけ実行します(訳注: 1度実行されるとその旨を body に書き込むので、 再度実行するには once を含む定義を「忘れ」(forget)て再度定義(読み込み)する必要がある)

~~bt ( ) gforth-1.0 “~~bt”

スタック・ダンプとバックトレースを出力

~~1bt ( ) gforth-1.0 “~~1bt”

スタックダンプとバックトレースを(onceと同様) 1 回だけ実行します

??? ( ) gforth-0.2 “???”

デバッグ・シェルを実行します

WTF?? ( ) gforth-1.0 “WTF??”

バックトレースとスタック・ダンプを使用してデバッグ・シェルを実行します

!!FIXME!! ( ) gforth-1.0 “!!FIXME!!”

決してこの場所に到達してはいけないワード(訳注: -2605 を throw する)

replace-word ( xt1 xt2 –  ) gforth-1.0 “replace-word”

xt2 が xt1 を実行するようにします。 両方ともコロン定義である必要があります。(訳注:
: foo ." foo" ;
: bar ." bar" ;
foo foo ok
bar bar ok
’ foo ’ bar replace-word ok
foo foo ok
bar foo ok

~~Variable ( "name" –  ) gforth-1.0 “~~Variable”

アクセスごとにワッチされる(~~ する)変数(variable を ~~variable に一時的にリネームする)

~~Value ( n "name" –  ) gforth-1.0 “~~Value”

アクセスごとにワッチされる(~~ する) value ( value を 一時的に ~~value にリネームする)

+ltrace ( ) gforth-1.0 “+ltrace”

行単位のトレースをONにする。

-ltrace ( ) gforth-1.0 “-ltrace”

行単位のトレースをOFFにする

#loc ( nline nchar "file" –  ) gforth-1.0 “#loc”

次のワードの場所を "file"nline nchar と設定します


Next: Assertions, Previous: Forgetting words, Up: Programming Tools   [Contents][Index]