我正在调试一个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
语句?
我会写一个脚本来自动导航调试器.我不知道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"
}
"Program exited normally" { exit; } }
}
我会将"main"更改为您认为程序出错的函数.您还可以插入所需的任何其他调试器命令,例如在打印变量之前打印出您所在的行; 在这里我使用"信息本地"打印出所有本地值.显然,您需要将此输出保存到文件进行分析.Expect非常容易学习,语法都基于tcl.