我有一个程序因为分割错误而崩溃。生成核心文件。
在gdb中运行核心给我提供了以下内容:
HPGDB6.1用于HP (32位或64位)和目标HP-UX11iv2和11iv3。
核心由‘gcpf1fwcApp’生成。
程序以信号6终止,中止。
我用了命令
线程应用所有bt
当我检查堆栈跟踪时,会得到主线程中的错误,该线程处于等待状态。
但是,当我在GDB中运行相同的程序时,堆栈跟踪中会出现一个完全不同的错误。这似乎比核心转储更正确。
该程序有31个线程。
为什么我会有这样的区别?
发布于 2010-09-07 03:05:03
很可能你只是看错了线程。
试试thread apply all where,看看其中一个线程是否实际上是abort()正在运行。
在调试活动进程时,GDB将在线程接收到SIGABRT时停止,因此很可能会显示相关线程。
在调试内核时(死后),GDB不知道哪个线程是相关的,因此以操作系统将它们保存到内核的顺序显示给您。Linux内核保存导致进程先死的线程,因此Linux上的GDB从内核显示相关线程。我猜HP-UX不会这么做,所以GDB会向您展示一个“随机”线程。
https://stackoverflow.com/questions/3650812
复制相似问题