TCL代码调试器/步进器

时间:2015-08-11 16:06:27

标签: debugging tcl

我想知道是否有任何“当前”工具允许我调试或逐步执行我正在运行的代码。我发现的所有程序都被大量弃用和/或不适用于TCL 8.6。

编辑:更清楚,这正是我需要的:

我需要一个工具,让我可以看到哪一行代码正在执行。我的错误来自外部硬件源,我需要查看硬件出现故障时正在执行的代码行。

2 个答案:

答案 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的来源。