强制coredump对glib free错误



当我运行我的程序时,我得到以下错误,它不会在gdb下发生。我怎么能强迫glibc或ubuntu转储核心中止?我尝试了"ulimit -c unlimited"。但是,这不是赛区的失误,也不是运气不好。此外,我在valgrind中有太多的内存错误,修复所有这些错误将花费很多时间。

同样,将MALLOC_CHECK_设置为0不会强制程序退出。但是,这不是我的选择。

* glibc detected ./main: free(): invalid next size (fast): 0x0000000000ae0560 **

编辑总之,我找到了导致valgrind中glibc损坏的原因。保持开放,看看是否可行

来自glibc文档:

如果MALLOC_CHECK_设置为0,任何检测到的堆损坏将被静默忽略;如果设置为1,则在stderr上打印诊断信息;如果设置为2,则立即调用abort。

调用abort()通常会产生一个核心转储(取决于ulimit -c的设置)。

使用Valgrind诊断并修复问题。这会更快,更直接,因为这看起来确实像一个典型的堆损坏。

如果你使用一个通用的包,那么你的发行版可能有一个可用的(Valgrind)包。

创建核心转储的唯一其他方法是在转储发生之前将GDB附加到进程上。但这仍然不能让你更接近于导致问题的解决方案。Valgrind是更好的方法。

最新更新