Advertisement

通过mcheck实现C/C++程序在Linux系统中的堆内存异常检查(C调试笔记)

阅读量:

在C/C++编程语言的开发过程中,堆内存的管理始终是一个令开发者倍感棘手的问题,尤其是在涉及规模庞大的代码模块时,由于堆内存被非法访问或越界修改而引发程序崩溃的现象屡见不鲜。更为复杂的是,程序出现异常行为的位置往往与实际发生错误的地点存在较大偏差(通常是在堆内存越界操作发生一段时间之后才表现出问题),这使得此类错误的定位变得异常困难。而在多线程环境下,此类问题的影响程度还会进一步加剧。
那么,是否存在一种方式可以在堆内存越界时立即触发程序崩溃,从而帮助开发者及时获取现场信息呢?
答案是肯定的。本篇笔记将介绍一种用于实现堆内存一致性检测的调试方法—借助mcheck函数进行堆内存状态监控
需要注意的是,本文所述方法并不适用于检测内存泄漏问题。若需进行此类检测,请使用valgrind工具。尽管mcheck.h头文件中定义的mtrace和muntrace函数也可以实现类似功能(详见 这里 ),但在检测内存泄漏方面,valgrind仍是当前主流工具。

**1. mcheck函数
** mcheck是包含在mcheck.h头文件中的一个GNU扩展函数(典型路径为:/usr/include/mcheck.h),其主要作用是实现对堆内存的一致性检查,该函数的具体原型如下:

复制代码

全部评论 (0)

还没有任何评论哟~