我认为这更多是Tcl配置问题,而不是Tcl编码问题...
我继承了一系列Tcl脚本,这些脚本在我公司内部构建的仿真工具中使用。在我的脚本中,我发现了很多实例,这些实例中似乎有对未在任何地方声明的函数的函数调用。如何跟踪这些幻像函数的路径?
例如,某人构建了名为source
的自定义包含函数,而不是使用INCLUDE
。当我尝试在Tclsh上运行时,Tclsh显然表现不佳,但是使用我的仿真软件,它运行良好。
我已经为INCLUDE
尝试了整个仿真软件,但是我没有任何运气。在模拟软件之外是否还有其他明显的位置可以定义Tcl函数?
答案 0 :(得分:1)
可能性:
在该软件随附的某些其他软件包中。 检查并查看是否设置了环境变量TCLLIBPATH。 还要检查并查看仿真软件是否设置了TCLLIBPATH。 这将是搜索Tcl软件包的目录列表,您 将需要搜索位于 主要的源代码树。
另一种可能性是在pkgIndex.tcl文件中指定了位置。 检查所有pkgIndex.tcl文件,并在主源代码树之外查找位置。
由于您说过许多未知函数的实例,所以我首先 猜测是你有 找不到加载软件包的所有目录。但是 “未知”命令处理程序也是可能的。
编辑:
我忘记了另一种可能性。检查并查看您的软件是否设置了auto_path
变量。检查添加到auto_path
的所有目录是否存在
其他软件包。
答案 1 :(得分:0)
这对您来说不是一个很好的答案,但是我怀疑这是您将获得的最好的答案...
该过程可以在很多地方定义。最好的选择是使用findstr
(在Windows上)或grep -R
(在POSIX平台上)之类的工具搜索所有相关的源文件。但这可能仍无济于事!它可能不是一个过程,而是一个通用命令,可以用C而不是过程来实现,或者可以在打包的应用程序归档文件中定义(通常不方便查看)。还有其他类型的脚本实现命令,这可能会使事情变得尴尬。一般来说,搜索和调查是您最好的选择,但它可能无法正常工作。
除了某些自省操作外,Tcl并没有真正区分不同类型的命令。如果幸运的话,您会发现info body
告诉您过程的定义(而info args
和info default
告诉您有关参数的信息),但这对其他命令没有帮助类型。 Tcl 8.7将包含一个命令(info cmdtype
),该命令将有助于缩小下一步的工作范围,但这对您现在没有用,而且在旧版本中肯定不存在。