1

Tcl ライブラリ API および/または Tcl 内部インターフェイスを使用して Tcl スクリプト デバッガーをビルドできるかどうかを知りたいです (そうするのに十分なデータが含まれているかどうかを意味します)。既存の tcl デバッガーが tcl スクリプトを計測し、この追加レイヤーで動作することに気付きました。私の考えは、Tcl_CreateObjTrace評価されたすべてのコマンドをトレースし、それをコールスタック、ローカルなどを取得するポイントとして使用することでした。問題は、評価時に API からすべての情報にアクセスできるとは限らないことです。たとえば、どの行が現在評価されているかを知りたいのですが、Interpそのような情報は上位の評価についてのみあります(iPtr->cmdFramePtr->lineプロシージャの本体では空です)。誰もそのようなアプローチを試みましたか?意味はありますか?ハッシュ化されたエントリを調べる必要があるかもしれませんInterp? 手がかりや意見をいただければ幸いです (Tcl 8.5 に最適です)。

4

1 に答える 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 に答える