如何检测segfault是否由内存不足造成的?
我有一个段错误,valgrind和duma / efence,因为它似乎崩溃这些工具(Valgrind“不可能发生的事情”,杜马:“mprotect()失败:无法分配内存”诊断)
应用程序(Gazebo)只是崩溃了一个段错误,堆栈跟踪似乎没有提供许多提示,为什么。
TLDR: 是否有简单的工具或方法来确认或排除内存不足的情况是导致段错误的原因?
(顶部在崩溃前不显示过多的内存使用量)
在Linux上,内存不足的情况可以通过以下两种方式之一来体现:
brk()
或mmap()
调用将失败,并使用ENOMEM
。 此后不久,应用程序尝试解除从malloc()
返回的NULL指针的引用并崩溃。 因此,您可以通过检查strace未显示与ENOMEM
失败的brk()
或mmap()
调用并验证dmesg中是否显示OOM杀手消息来排除OOM。