Tcl脚本非仪器调试器使用Tcl库和/或Tcl内部?

时间:2014-06-16 11:13:36

标签: c++ c tcl tcl-api

我想知道是否可以使用Tcl Library API和/或Tcl内部接口构建tcl脚本调试器(我的意思是如果它们包含足够的数据来执行此操作)。我注意到现有的tcl调试器可以处理tcl脚本并使用这个附加层。我的想法是使用Tcl_CreateObjTrace来跟踪每个已评估的命令,并将其用作检索callstack,locals等的一个点。问题是,似乎并非每个信息都可以在评估时从API访问。例如,我想知道当前评估的是哪一行,但Interp仅对顶级评估有此类信息(iPtr->cmdFramePtr->line对于过程的主体是空的)。有人试过这种方法吗?它有意义吗?也许我应该查看Interp中的哈希条目?任何线索和意见都将受到赞赏(最好是Tcl 8.5)。

1 个答案:

答案 0 :(得分:0)

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

source

准备好充足的输出。 proc traceinfo args { puts [dict get [info frame -2] cmd] } trace add execution source enterstep traceinfo source yourscript.tcl 之外的字典可以包含各种相关条目,例如有关命令行号和源文件内容的信息; info frame条目是被调用命令的 unsubstituted 源(如果您需要替换版本,请参阅跟踪回调的相关参数,上面是cmd)。