c - 自动跟踪变量的变化

标签 c debugging compiler-construction

我正在调试一个 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/

相关文章:

c++ - 哪些是最常用的 gcc/g++ 信息标志(不仅仅是优化)

visual-studio-2012 - Typescript 无法在 Build VS 2012 上编译

c - GCC 和 Clang 优化选项之间的区别

C 段错误巫术

c - CPU 与使用 malloc 的 Wall time 测量值的奇怪差异

c - 如何计算一排 N 个盒子的 Rect 填充长度 L,它们之间有 S 个空间

debugging - 如何在 TortoiseSVN 中调试某些东西?

Linux 中的客户端服务器应用程序读取时被阻止的代码

c++ - C++ 中的回溯

.net - 在 Visual Studio 中调试时如何查看我的应用程序线程?