如何解决如何检测内存不足的段错误?
| 如何检测内存不足是否引起了段错误? 我有一个segfault,它无法通过valgrind和duma / efence进行诊断,因为它似乎使那些工具本身崩溃了(Valgrind \“发生意外情况”,duma:\“ mprotect()失败:无法分配内存\”) 该应用程序(Gazebo)仅因出现段错误而崩溃,并且堆栈跟踪似乎并未提供许多提示。 TLDR:是否有简单的工具或方法来确认或排除内存不足情况是段错误的原因? (顶部未显示崩溃前过多的内存使用)解决方法
在Linux上,内存不足情况可以通过以下两种方式之一来体现:
如果禁用了过量使用,则
brk()
或mmap()
呼叫将失败,并出现ENOMEM
。此后不久,应用程序尝试取消引用从“ 3”返回的NULL指针,并崩溃。
如果启用了过量使用,则OOM杀手将启动,并使用SIGKILL杀死该进程。消息留在dmesg中。
这样,您可以通过以下方法排除OOM:检查strace不显示ѭ0或ѭ1失败的ENOMEM
,并验证dmesg中是否没有OOM杀手消息。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。