我有一个程序因分段错误而崩溃。核心文件已经生成。
在gdb中运行核心给出了以下内容:
适用于HP Itanium(32或64位)的HP gdb 6.1和目标HP-UX 11iv2和11iv3。
核心由`gcpf1fwcApp'生成 程序终止,信号6,Aborted。
我使用了命令
线程全部应用bt
当我检查堆栈跟踪时,我在主线程中遇到错误,处于等待状态。
然而,当我在GDB中运行相同的程序时,我在堆栈跟踪中得到了完全不同的错误。这似乎比核心转储更正确。
该程序有31个线程。
为什么我会遇到这种差异?
答案 0 :(得分:3)
您可能只是在查看错误的帖子。
尝试thread apply all where
,看看其中一个帖子是否实际上是abort()
。
调试实时进程时,GDB会在线程收到SIGABRT
时停止,因此可能会显示相关的主题。
在调试核心(事后)时,GDB不知道哪个线程是相关的,因此以操作系统将其保存到核心的顺序向您显示。 Linux内核保存导致进程首先死的线程,因此Linux上的GDB显示来自核心的相关线程。我猜测HP-UX不这样做,因此GDB会向您显示“随机”线程。