如何在事后gdb会话中找到导致SEGFAULT的线程?

Mar*_* C. 22 c++ gdb segmentation-fault

在我的应用程序中,我处理SIGSEG以产生回溯并调用abort()以生成核心转储.

如果我现在对核心运行gdb-post-mortem分析,则导致SEGFAULT的线程不再可见.有什么我可以做的,所以我看到SEGFAULT的原因?

最好的问候,马丁

Ser*_*kov 18

您可以使用命令thread apply all btthread apply all bt full获取所有线程的回溯.可能有用.

顺便说一句,如果你摆脱了处理程序,你的操作系统会创建一个核心文件吗?

  • `ulimit -c unlimited`看看没有任何处理程序你会得到什么核心. (4认同)
  • 通常,“gdb”(当用于分析核心文件时)使用命令“bt”打印导致核心转储的线程的堆栈跟踪。这是默认行为。问题实际上是关于当核心转储不在第一个线程中时的相反情况。这就是为什么我建议获取所有线程的回溯。 (2认同)