如何找到TCL程序的位置?(How to find the location of TCL proc

2019-09-23 04:41发布

如何才能找到程序(功能)的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]
}

对于功能InitEptData&SetEptData我找不到任何声明。 可能有人在深与TCL熟悉得多,解释如何解决我面临着这个问题? 提前致谢!

Answer 1:

没有通用的答案,因为Tcl的可以让你在运行程序申报,因此他们可能没有实际的文件引用。

有一些尝试,以提高该有一个定义文件特效的情况下,例如TIP280 ,这实际上是可以作为info frame近8.5版本,并提示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商业调试器。



Answer 2:

从bash shell中,我使用:

 find . -name "*.tcl" -exec grep -H proc_name_to_find {} \; | grep proc

这个发现TCL的所有文件,然后对每个文件执行grep来搜索proc_name_to_find,然后输出greped再次为那些包含“PROC”线

由于grep的-H输出文件名与输出字符串,这说明你,你需要找到在编辑器中定义的输出。

例如

$ find . -name "*.tcl" -exec grep -H set_prime {} \; | grep proc
./my_lib.tcl:proc prime_test::set_prime {{quiet 0} {no_compare 0}} {

没有与xargs的其他解决方案...



文章来源: How to find the location of TCL procedure?
标签: tcl procedure