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


8.2 Stack depth changes during interpretation

ファイルをロードした後、 スタックに項目が残っていることに気づくことがあります。 Depth-changes.fs ツールを使用すると、 これらのスタック項目がファイル内のどこから来たのかをすばやく見つけることができます。

Depth-changes.fs を使用する最も簡単な方法は、 チェックするファイルの前にこれをインクルードすることです。 例:

gforth depth-changes.fs my-file.fs

これにより、 すべての空行(インタプリタ状態)でのデータ・スタックの深さと FP スタックの深さが、 最後の空行(インタプリタ状態)での深さと比較されます。 深さが等しくない場合は、 ファイル内の位置とスタックの内容が ~~ (see Debugging) で出力されます。 これは、 指摘行より前の空ではない行内の段落(paragraph)でスタックの深さの変更が発生したことを示します。 ファイルの最後に空行を残しておいて、 最後の段落もチェックされるようにすることをお勧めします。

通常、 空行のみをチェックするのはうまく機能しますが、 空行ではない大きなブロックが存在する場合(大きなテーブルを構築する場合など)、 このブロックのどこでスタックの深さが変更されたのかを知りたい場合があります。 以下を使用すると、 解釈(interpret)されたすべての行をチェックできます

gforth depth-changes.fs -e "' all-lines is depth-changes-filter" my-file.fs

これにより、 各行末ごとにスタックの深さがチェックされます。 したがって、 深さの変更は ~~ によって報告された行で発生しています(それより前の行ではありません)。

注意: これにより、 スタックの深さが変更される場所を示す精度が向上しますが、 多くの、 意図した、 スタックの深さの変更が報告されることが多いことに注意してください(たとえば、 解釈(interpret)された計算が複数の行にまたがる場合)。 一部の行のチェックを抑制するには、 これらの行の末尾にバックスラッシュを置き(その後に空白は続きません)、 以下を使用します

gforth depth-changes.fs -e "' most-lines is depth-changes-filter" my-file.fs