Tcl_CreateObjTraceの使用例はありますか?これは、TclLibを使用してCコードにTcl呼び出しのトレースを追加する手順です。tcllib Tcl_CreateObjTrace使用例
私の主な問題はこれです:私は自分のTclコードのトレーサを開発しようとしています。しかし、私は私自身の手順をトレースしたいと思います。次のコードは動作します:
static int
tcl_tracer(ClientData clientData,
Tcl_Interp* interp,
int level,
CONST char* command,
Tcl_Command commandToken,
int objc, Tcl_Obj *CONST objv[])
{
int param_length = 0;
CONST char *param_str = NULL;
int i;
/**
* The first three parameters represent the procedure
*/
if (objc < 2) {
printf("Invalid number of parameters for the tracer: %d\n", objc);
return TCL_OK;
}
param_str = Tcl_GetStringFromObj(objv[0], ¶m_length);
printf("%d:%s ", 0, param_str);
param_str = Tcl_GetStringFromObj(objv[1], ¶m_length);
printf("%d:%s ", 1, param_str);
param_str = Tcl_GetStringFromObj(objv[2], ¶m_length);
printf("%d:%s ", 2, param_str);
printf("\n");
return TCL_OK;
}
しかし、それはすべて手順をトレースします。それは 'puts'、 'set'などをトレースします。 これを避ける方法はありますか?トレースのレベルを指定するパラメータがあります。しかし、自分のコードがどれだけ深いレベルで実行されるかは、事前には分かりません。
非常に高く評価されています。
-Ilya。そのページとして
はい、TCL_ALLOW_INLINE_COMPILATIONいくつかの時間を働いた。 :(これは、Tcl呼び出しでビルドされたものをたくさん削除しましたが、すべてではありません。 [トレース追加の実行]を使用することは可能でしょうか(http://www.tcl.tk/man/tcl8.5/TclCmd/trace.htm #M9)を使用してすべてのユーザー手順をトレースするか、手動で登録する必要がありますか? – ilya1725
@ilyaそれぞれを登録する必要がありますが、これは難しいことではありません。そのリストを繰り返してトレースを追加するか、proc(http://wiki.tcl.tk/510に記載されています)をオーバーロードして自動的にトレースを追加することができます。 –
こんにちはDonal: 素晴らしいアドバイスありがとうございました。 – ilya1725