在我的应用程序中,我处理 SIGSEGV
以生成回溯并调用 abort()
来产生核心转储。
如果现在我对 core 进行 gdb-post-mortem 分析,导致 SEGFAULT 的线程将不再可见。有没有什么方法可以让我看到 SEGFAULT 引起的原因?
在我的应用程序中,我处理 SIGSEGV
以生成回溯并调用 abort()
来产生核心转储。
如果现在我对 core 进行 gdb-post-mortem 分析,导致 SEGFAULT 的线程将不再可见。有没有什么方法可以让我看到 SEGFAULT 引起的原因?
你可以使用命令thread apply all bt
或者thread apply all bt full
来获取所有线程的回溯信息。可能会很有用。
顺便问一下,如果你去掉处理器,你的操作系统会创建一个核心文件吗?
ulimit -c unlimited
,不设置任何处理程序,查看您将获得哪个核心。 - user184968gdb
(用于分析核心文件时)使用命令bt
打印导致核心转储的线程的堆栈跟踪。这是默认行为。实际上,问题是关于核心转储不在第一个线程的相反情况。这就是为什么我建议获取所有线程的回溯信息。 - user184968