1
有沒有人有如何使用Tcl_CreateObjTrace的示例?這是使用TclLib將Tcl調用追蹤添加到C代碼的過程。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。
Yes,TCL_ALLOW_INLINE_COMPILATION一些時間工作。 :(它確實消除了很多內置的Tcl調用,但不是全部。 是否可以使用[trace add execution](http://www.tcl.tk/man/tcl8.5/TclCmd/trace.htm) #M9)來跟蹤所有的用戶程序,或者必須手動完成每個程序的註冊? – ilya1725 2012-02-14 18:40:36
@ilya您必須註冊每個程序,這不是_that_難,因爲您可以使用[info procs]列出全局程序並且然後遍歷這個列表來添加追蹤,或者你可以重載proc(http://wiki.tcl.tk/510說明如何)自動添加追蹤 – 2012-02-17 09:18:50
嗨Donal: 很棒的建議,非常感謝。 – ilya1725 2012-02-21 21:26:12