Tcl ライブラリ API および/または Tcl 内部インターフェイスを使用して Tcl スクリプト デバッガーをビルドできるかどうかを知りたいです (そうするのに十分なデータが含まれているかどうかを意味します)。既存の tcl デバッガーが tcl スクリプトを計測し、この追加レイヤーで動作することに気付きました。私の考えは、Tcl_CreateObjTrace
評価されたすべてのコマンドをトレースし、それをコールスタック、ローカルなどを取得するポイントとして使用することでした。問題は、評価時に API からすべての情報にアクセスできるとは限らないことです。たとえば、どの行が現在評価されているかを知りたいのですが、Interp
そのような情報は上位の評価についてのみあります(iPtr->cmdFramePtr->line
プロシージャの本体では空です)。誰もそのようなアプローチを試みましたか?意味はありますか?ハッシュ化されたエントリを調べる必要があるかもしれませんInterp
? 手がかりや意見をいただければ幸いです (Tcl 8.5 に最適です)。
質問する
157 次
1 に答える
0
非侵入型デバッグ システムの最善の策は、実行ステップ トレース (トレースが添付されているコマンドの実行中に呼び出されるコマンドごとinfo frame
に呼び出される) を使用して、実際に情報を取得することです。source
これは、スクリプト全体を見ることができるように接続する単純なバージョンです。
proc traceinfo args {
puts [dict get [info frame -2] cmd]
}
trace add execution source enterstep traceinfo
source yourscript.tcl
十分な出力を用意してください。ディクショナリ out of にinfo frame
は、コマンドの行番号やソースファイルに関する情報など、あらゆる種類の関連エントリを含めることができます。cmd
エントリは、呼び出されたコマンドの置換されていないソースです (置換されたバージョンが必要な場合は、上記のトレース コールバックの関連する引数を参照してくださいtraceinfo
)。
于 2014-06-17T14:25:34.143 に答える