我想知道是否有任何“当前”工具允许我调试或逐步执行我正在运行的代码。我发现的所有程序都被大量弃用和/或不适用于TCL 8.6。
编辑:更清楚,这正是我需要的:
我需要一个工具,让我可以看到哪一行代码正在执行。我的错误来自外部硬件源,我需要查看硬件出现故障时正在执行的代码行。
答案 0 :(得分:1)
您可以尝试跟踪命令执行,如this Stack Overflow answer中所述。它会产生相当大的性能影响,但它可以生成详细的日志记录。由于您正在寻找与硬件问题相关的内容,您可能还希望使用fconfigure
将输出缓冲切换为line
(或none
;差异无关紧要你只写完整的行。)
在Linux 上运行时查找的硬件问题的另一种方法是尝试使用strace
运行。这记录了系统调用正在发生的事情,这可能非常有用。如果您正在查看日志,请注意在使用事件循环时Tcl的实现会调用gettimeofday()
;这是预期的,正确的行为。
答案 1 :(得分:0)
这不是教学的地方,但我真的建议你看一下tkcon
提供的内省和考试工具。一个简单且非常简短的示例:您已经从tkcon
启动了一些代码,其代码包含模糊且复杂的命令foo
。你怀疑它有什么问题,所以你输入命令edit -type proc foo
并得到一个带文字的窗口
proc foo {} {
for {set i 0} {$i < 10} {incr i} {
set a [expr {2*$i}]
}
}
您决定跟踪a
的更改并输入observe variable a write
作为正文中的新第一个命令。然后,您在Send to slave
菜单中选择Send to...
,这意味着现在已在主foo
窗口中重新定义tkcon
。再次运行代码时,对a
的更改将记录到tkcon
控制台窗口(以set a ...
命令字符串的形式)。
返回编辑窗口,您可以通过插入命令idebug break
来添加断点。如果在控制台窗口中输入命令idebug on
并再次运行代码,此时执行将暂停,并且您将获得一个交互式提示,您可以在此处进行操作。爬上/下降调用堆栈,列出变量,获取堆栈跟踪,还执行任意命令来更改变量值等。
如果您在编辑窗口中对命令进行了重大更改,则可以将其保存到新文件或将其附加到旧文件(Tcl源文件可以具有相同命令的多个定义:仅最后一个用于)。如果您不保存,原始来源将保持不变。您甚至可以使用相同的命令打开多个编辑窗口,并单独编辑它们,尝试不同的变体。
您还可以将tkcon
发送到您自己的代码中,并使用tkcon show
获取一个知道您的程序状态的控制台窗口。
在控制台中输入命令edit -type file $argv0
可让您查看最终文档tkcon
的来源。