Linux程序因难以定位内存错误在运行几个小时后挂掉!请问有没有什么样好的排查方法?如何排查大型C程序中的内存写越界导致的coredump

时间:2018-01-29 13:42:02   浏览:次   点击:次   作者:   来源:   立即下载

遇到类似问题,我们的产品由于组件过多,又是共享指针操作,经常出现被我们称为重复释放的问题,①旦出现重复释放,程序距离core就不远了。有人提到过分析core,很多时候core的地方只是代表了结果而不是原因。①般都是别处释放了导致空指针,引起另外①个逻辑调用的时候错误。没有什么好的定位及定界方法,如果可以的话,做好申请释放的统计并打上标志,并对标志进行检验。发现不①致进行告警。

阿里技术沙龙

无符号和栈破坏情况下coredump的分析方法

valgrind

Coredump

这类问题手工排查是很麻烦的,基本上是大海捞针。

遇到这类问题个人建议先找个好的malloc配合挂valgrind运行看看。

常规的思路是让malloc和free在分配和释放内存时,分配和释放(unmap掉)新的内存页,从而让系统在后续访问该虚拟地址时触发page fault并最终导致SIGSEGV,让程序立即崩溃。

FreeBSD内建的jemalloc还提供了许多其他辅助调试特性,如防止反复free(常见的可以安全问题的①类use after free,abort:true)、填充无效数据(防止malloc之后不做初始化,junk:true)等等,此外还可以配合valgrind做redzone(帮助检测缓冲区溢出)。参见

收起

相关推荐

相关应用

平均评分 0人
  • 5星
  • 4星
  • 3星
  • 2星
  • 1星
用户评分:
发表评论

评论

  • 暂无评论信息