核心转储与gdb堆栈跟踪不同步

时间:2010-09-06 10:40:14

标签: c++ gdb crash-dumps hp-ux

我有一个程序因分段错误而崩溃。核心文件已经生成。

在gdb中运行核心给出了以下内容:

  

适用于HP Itanium(32或64位)的HP gdb 6.1和目标HP-UX 11iv2和11iv3。

     

核心由`gcpf1fwcApp'生成   程序终止,信号6,Aborted。

我使用了命令

  

线程全部应用bt

当我检查堆栈跟踪时,我在主线程中遇到错误,处于等待状态。

然而,当我在GDB中运行相同的程序时,我在堆栈跟踪中得到了完全不同的错误。这似乎比核心转储更正确。

该程序有31个线程。

为什么我会遇到这种差异?

1 个答案:

答案 0 :(得分:3)

您可能只是在查看错误的帖子。

尝试thread apply all where,看看其中一个帖子是否实际上是abort()

调试实时进程时,GDB会在线程收到SIGABRT时停止,因此可能会显示相关的主题。

在调试核心(事后)时,GDB不知道哪个线程是相关的,因此以操作系统将其保存到核心的顺序向您显示。 Linux内核保存导致进程首先死的线程,因此Linux上的GDB显示来自核心的相关线程。我猜测HP-UX不这样做,因此GDB会向您显示“随机”线程。