gdb - 获得真正的崩溃线

时间:2012-06-13 23:23:12

标签: c++ gdb

我的多线程程序崩溃了。我有.core个文件。我加载它并thread apply all backtrace并为崩溃的线程获取以下输出:

Thread 1 (Thread 0x8567800 (runnable)):
#0  GG::serialize (this=0x847c180, outbin=@0xbf2f7c30)
    at basic_string.h:269

好的,在序列化时崩溃,但报告它发生在STL basic_string.h:269

但是如何在serialize()函数中获得实际的崩溃线?

1 个答案:

答案 0 :(得分:1)

如果崩溃是可重现的,最简单的方法是重新编译错误的代码并禁用内联(在g++中,这是-fno-inline-fno-default-inline)。

如果您必须分析您拥有的核心,请尝试查找string中调用的方法,并在serialize函数中找到相应的调用。

有时,除了反汇编函数之外没有其他方法可以找到问题,并通过它来查找汇编代码的哪些部分与源代码相对应。然后,要计算局部变量的值,您必须执行info registers,并跟踪将哪些值移动到哪个寄存器中。