1

我想知道是否可以使用 Tcl 库 API 和/或 Tcl 内部接口构建 tcl 脚本调试器(我的意思是它们是否包含足够的数据来执行此操作)。我注意到现有的 tcl 调试器检测 tcl 脚本并使用这个附加层。我的想法是使用Tcl_CreateObjTrace跟踪每个评估的命令并将其用作检索调用堆栈、本地变量等的点。问题是在评估时似乎并非所有信息都可以从 API 访问。例如,我想知道当前正在评估哪一行,但Interp只有顶级评估的此类信息(iPtr->cmdFramePtr->line对于程序的主体为空)。有人尝试过这种方法吗?这有什么意义吗?也许我应该查看散列条目Interp? 任何线索和意见将不胜感激(最适合 Tcl 8.5)。

4

1 回答 1

0

对于非侵入式调试系统,您最好的选择可能是尝试使用执行步骤跟踪(在执行跟踪附加到的命令期间调用的每个info frame命令调用)来实际获取信息。这是一个简单的版本,附加到source以便您可以观看整个脚本:

proc traceinfo args {
    puts [dict get [info frame -2] cmd]
}
trace add execution source enterstep traceinfo
source yourscript.tcl

为大量输出做好准备。字典中info frame可以有各种相关的条目,比如命令的行号是什么,源文件是什么等信息;该cmd条目是调用命令的替换源(如果您想要替换版本,请参阅traceinfo上面跟踪回调的相关参数)。

于 2014-06-17T14:25:34.143 回答