我正在调试一个 C 程序(Linux 中的 GCC 和 GDB 以及 Windows 中的 Visual Studio),它在两种不同的体系结构上给出了不同的结果。我想通过跟踪变量中存储的值的变化来比较每个体系结构的执行情况,以找出差异。
file main.c, line 234. Variable A changes from 34 to 23 file main.c, line 236. Variable B changes from 0 to 2 ..... etc.
是否可以指示编译器来检测这种效果,而无需使用 printf
语句手动乱扔源代码?
最佳答案
我会编写一个脚本来自动驾驶调试器。我不知道 expect 在 Windows 上是否可用(可能是),但它是编写自动驾驶交互式工具的脚本的好工具。该脚本将类似于:
#!/usr/bin/expect set progname [lindex $argv 0] spawn gdb $progname expect "(gdb)" send "break main\n" expect "(gdb)" send "run\n" while 1 { expect { "(gdb)" { send "info locals\n" expect "(gdb)" send "next\n" }<p></p> <pre><code>"Program exited normally" { exit; } } </code></pre>
}
我会将“main”更改为您认为程序出错的函数。您还可以插入您想要的任何其他调试器命令,例如在打印变量之前打印出您所在的行;在这里,我使用打印出所有本地值的“info locals”。显然,您需要将此输出保存到文件中以供分析。 Expect 非常容易学习,语法全部基于 tcl。
关于c - 自动跟踪变量的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4031652/