1

我的多线程程序崩溃。我有.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()函数中获得实际的崩溃线?

4

1 回答 1

1

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

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

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

于 2012-06-14T00:18:46.393 回答