我的多线程程序崩溃了。我有.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()
函数中获得实际的崩溃线?
答案 0 :(得分:1)
如果崩溃是可重现的,最简单的方法是重新编译错误的代码并禁用内联(在g++
中,这是-fno-inline
和-fno-default-inline
)。
如果您必须分析您拥有的核心,请尝试查找string
中调用的方法,并在serialize
函数中找到相应的调用。
有时,除了反汇编函数之外没有其他方法可以找到问题,并通过它来查找汇编代码的哪些部分与源代码相对应。然后,要计算局部变量的值,您必须执行info registers
,并跟踪将哪些值移动到哪个寄存器中。