3

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

在 gdb 中运行核心给了我以下信息:

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

核心是由“gcpf1fwcApp”生成的。
程序以信号 6 终止,Aborted。

我使用了命令

线程应用所有 bt

当我检查堆栈跟踪时,处于等待状态的主线程出现错误。

但是,当我在 GDB 中运行相同的程序时,堆栈跟踪中会出现完全不同的错误。这似乎比核心转储更正确。

该程序有 31 个线程。

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

4

1 回答 1

4

您可能只是在查看错误的线程。

试试看thread apply all where,看看其中一个线程是否真的在abort()ing。

在调试实时进程时,GDB 将在线程接收到 时停止SIGABRT,因此可能会向您显示相关线程。

在调试内核(事后分析)时,GDB 不知道哪个线程是相关的,因此会按照操作系统将它们保存到内核中的顺序向您显示它们。Linux内核首先保存导致进程死亡的线程,因此Linux上的GDB从内核显示相关线程。我猜 HP-UX 不会这样做,因此 GDB 会向您显示一个“随机”线程。

于 2010-09-07T03:05:03.923 回答