崩溃正常,但没有GDB?

Ste*_*ing 21 crash gdb segmentation-fault

正常运行时,我的程序崩溃并出现分段错误.所以我用gdb运行它,但是当我这样做时它不会崩溃.有谁知道为什么会这样?我知道Valgrind的faq提到了这一点(并没有在valgrind下崩溃),但我真的找不到与谷歌中的gdb相关的任何内容.如果有人能告诉我原因,或者在发生这种情况时建议寻找一些东西,我将非常感激.

Eth*_*eal 15

我以前曾经遇到过这种情况(你并不孤单),但我不记得我做了什么来解决问题(我认为这是双重免费).

我的建议是设置你的环境来创建核心转储,然后在程序崩溃后使用GDB调查核心转储.在bash中,这是完成的ulimit -c size,其中大小可以是任何东西; 我个人使用50000最大25MB; 该单位以512字节为增量.

您可以使用GDB来调查核心转储gdb program core.


fvu*_*fvu 7

听起来像你在那里的Heisenbug :-)

如果你正在使用的平台能够生成核心文件,那么应该可以使用核心文件和gdb来查明程序崩溃的位置 - 可以在这里找到简短的解释.

但是它会崩溃几次,当崩溃是由堆栈粉碎或可变覆盖引起的时,这个bug似乎"走来走去".


Dan*_*ien 5

尝试附加到 中正在运行的进程gdb,继续,然后重现崩溃。换句话说,不要在 ; 内启动程序gdb。相反,正常启动程序,然后attach <pid>

有时,当单独单步执行各行时,导致程序崩溃的竞争条件不会显现出来,因为步骤之间的“长时间”暂停已经消除了竞争危险或使其变得极其不可能。


Ste*_*ing 3

嗯,我追踪到了 pthread_detach 调用。我正在做 pthread_detach(&thethread)。我只是拿走了引用并将其更改为 pthread_detach(thethread) 并且工作正常。我并不肯定,但也许通过分离引用然后在超出范围时再次销毁它来实现双重释放?