c++ - Tcl 脚本非检测调试器使用 Tcl 库和/或 Tcl 内部?

标签 c++ c tcl tcl-api

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

最佳答案

对于非侵入式调试系统,您最好的选择可能是尝试使用执行步骤跟踪(调用跟踪所附加的命令执行期间调用的每个命令)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以上)。

关于c++ - Tcl 脚本非检测调试器使用 Tcl 库和/或 Tcl 内部?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24242399/

相关文章:

c++ - 异步写入位数组

c++ - 如何在创建新对象时使用 = 运算符?

c++ - 使用 for as while with counter

c - 在 C 中限制程序的执行时间(蒙特卡罗技术)

c++ - 如何生成一个好的随机种子传递给 srand()?

c - 实时信号的意义?

linux -/usr/bin/wish :don't have that file or directory

c++ - CRTP 基本构造函数崩溃,因为未构造子项

c++ - 如何在tcl中编译可加载的dll

macos - 使用 homebrew 安装 graphviz 时出现 tclstub 问题