如何使用GDB输出C +汇编程序跟踪?

Mik*_*ike 0 c++ gdb

我正在调试一个令人讨厌的问题,其中#include一个文件(不是我写的任何东西,用于记录)导致我的程序崩溃.这意味着,我已经workingbroken只有一个C(++)include语句发生了变化.我正在使用的一些库没有调试信息.

我想要做的是让GDB输出为程序运行执行的每一行C++,以及x86指令,这些格式文件不可用,我可以将两个输出区分开,并希望找出出错的地方.

这在GDB中很容易实现吗?

Joh*_*ley 5

您可以检查每个版本中预处理输出之间的差异.例如:

gcc -dD -E a.cc -o a.pre
gcc -dD -E b.cc -o b.pre
diff -u a.pre b.pre
Run Code Online (Sandbox Code Playgroud)

您可以尝试不同的"-d"设置,以使其更加详细/简洁.也许列表差异的东西是显而易见的.它通常类似于根据包含文件改变大小的结构.

如果不这样做,如果你真的想弄乱每条指令或线条痕迹,你可能会使用valgrind看看路径分歧的地方,但我认为你可能会陷入痛苦的世界.事实上你可能会发现valgrind发现你的bug然后100你不知道:)我希望问题只是一个结构或其他数据大小的差异,你不需要打扰.

你可以让gdb自动进行线路跟踪.这将是非常痛苦的.基本上你需要编写脚本来反复运行"n"(下一行)直到崩溃,然后检查日志.如果您可以编写脚本"b main",那么"运行",然后无限"n"即可.可能有一个内置的命令来做,但我不知道它.