如何在TCL中找到程序(功能)的位置.在位置下我指的是声明它的源文件.
我正在尝试读取外部源代码,但无法找到单个过程的声明,例如:
set MSISDNElement [regexp -all -inline {ISDN +[0-9]+} $Command]
if { $MSISDNElement != "" } {
foreach elm $MSISDNElement {
set MSISDNValue [list ISDN [getInternationalFormat [lindex $elm 1]]]
}
}
set EptData [list [lindex $Command 1]]
InitEptData 3
foreach Element $EptData {
SetEptData [lindex $Element 0] [lindex $Element 1]
}
Run Code Online (Sandbox Code Playgroud)
对于InitEptData和SetEptData函数,我找不到任何声明.有人可以更深入地了解TCL,解释如何解决我所面临的问题吗?提前致谢!
对此没有通用的答案,因为Tcl允许您动态声明过程,因此它们可能没有实际的文件引用.
有一些尝试可以改善具有定义文件的过程的情况,例如TIP280,它实际上可info frame用于最近的8.5版本,以及TIP 86,仅在讨论中.
但是如果简单grep不起作用,您可以跟踪创建过程或命令的时刻.
这种情况发生在各个地方(Tcl OO可能会添加更多,不确定):
load命令期间,二进制扩展使用Tcl_CreateCommand或更现代的Tcl_CreateObjCommand 注册其命令处理函数.source加载proc定义的文件的命令期间proc命令本身时定义新过程使用这些命令info commands,namespace children您可以遍历整个命名空间树,以获取执行命令之前和之后定义的命令列表.因此,您可以创建一个跟踪任何新命令的包装器.有关如何操作的一些提示,请参见http://wiki.tcl.tk/1489.
或者,只需使用像RamDebugger http://www.compassis.com/ramdebugger/Intro或ActiveStates商业调试器这样的调试器.