原文:http://www.cnblogs.com/san-fu-su/p/5737984.html

C里面没有垃圾回收机制,有时候你申请了动态内存却忘记释放,这就尴尬了(你的程序扮演了强盗角色,有借有还才是好孩子)。当你想找出内存泄露的地方时,有的投入海量的代码中,头痛不已。还好GNU C库提供了些简单的方法。

  mtrace和muntrace两个函数可以帮助我们追踪动态内存使用情况。前提是我们设置了MALLOC_TRACE环境变量,改环境变量需要指向我们系统下的一个可写入的常规文件。做法如下:

MALLOC_TRACE=/your/path/to/file.txt
export MALLOC_TRACE

  mtrace会为malloc,remalloc和free安装一些特殊的handlers。这些函数的使用情况都会被记录在文件中。

  muntrace会卸载之前安装的特殊handlers。也就意味着动态内存追踪结束。

  一般情况下我们在main函数开头部分调用mtrace,return之前调用muntrace。

  这两个的函数原型在下面给出

#include<mecheck.h>
void mtrace(void)
void muntrace(void)

  使用实例:

#include<mcheck.h>#include<stdlib.h>
int main(int argc, char *argv[])
{#ifdef DEBUGmtrace();#endifint *a = NULL a = malloc(sizeof(int)); //在这里我们不调用free函数 return 0; }

  在上面的代码中,我们没有调用muntrace(),也不推荐使用。原因是在linux C中不仅是你的程序会追踪动态内存问题,C库也会使用。如果你调用muntrace(),那就意味着C库停止追踪动态内存。

  如果你使用宏定义DEBUG编译文件,执行编译后的可执行文件,你会发现file.txt里面有些我们看不懂的东西。这些内容是给机器看的。大多数linux发行版本都带有mtrace命令(没错,名字一样的)。使用mtrace命令将机读内容转化为人读。使用如下命令:

mtrace a.out file.txt

上述代码执行该命令后的结果如下

Memory not freed:
-----------------------Address        Size            Caller
0x092a6378    0x4    at     /root/tmp.c:9

很显然第9行的malloc函数,我们没有调用相应的free()函数来释放内存。

转载于:https://www.cnblogs.com/orlion/p/5739856.html

【转】Linux C动态内存泄漏追踪方法相关推荐

  1. iOS 内存泄漏排查方法及原因分析

    级别: ★★☆☆☆ 标签:「iOS」「内存泄漏排查」「Leaks工具」 作者: MrLiuQ 审校: QiShare团队 本文将从以下两个层面解决iOS内存泄漏问题: 内存泄漏排查方法(工具) 内存泄 ...

  2. Linux内存泄漏检测方法总结

    Linux内存泄漏检测方法总结 一.mtrace分析内存泄露 mtrace原理 设置日志生成路径 测试实例 日志 泄露分析 使用addr2line工具定位源码位置 使用mtrace工具分析日志信息 二 ...

  3. 如何在linux下检测内存泄漏

    1.开发背景 在 windows 下使用 VC 编程时,我们通常需要 DEBUG 模式下运行程序,而后调试器将在退出程序时,打印出程序运行过程中在堆上分配而没有释放的内存信息,其中包括代码文件名.行号 ...

  4. C++ 程序内存泄漏检测方法

    一.前言 在Linux平台上有valgrind可以非常方便的帮助我们定位内存泄漏,因为Linux在开发领域的使用场景大多是跑服务器,再加上它的开源属性,相对而言,处理问题容易形成"统一&qu ...

  5. linux如何定位内存泄漏,快速定位内存泄漏的套路(linux)

    快速定位内存泄漏的套路(linux) 快速定位内存泄漏的套路(linux) https://blog.csdn.net/xieyihua1994/article/details/105248362/ ...

  6. Linux下清理内存和Cache方法 /proc/sys/vm/drop_caches

    Linux下清理内存和Cache方法 /proc/sys/vm/drop_caches 频繁的文件访问会导致系统的Cache使用量大增 $ free -m total used free shared ...

  7. Visual Studio 内存泄漏检测方法

    Visual Studio 内存泄漏检测方法 非MFC程序可以用以下方法检测内存泄露: 1.程序开始包含如下定义: #ifdef _DEBUG #define DEBUG_CLIENTBLOCK ne ...

  8. 使用 .Net Memory Profiler 诊断 .NET 应用内存泄漏(方法与实践)

    使用 .Net Memory Profiler 诊断 .NET 应用内存泄漏(方法与实践) 博客分类: Troubleshooting & tuning .netASP.netLoadrunn ...

  9. c语言内存泄漏怎么测试,C语言内存泄漏检测方法

    内存泄漏是C语言编程中一个很常见的问题,而且由于内存泄漏所导致的问题出现较缓慢,所以不容易觉察,所以写一个简单的程序来检测内存泄漏很有必要. 内存泄漏通常是指堆内存的泄漏,也就是通过malloc.ca ...

最新文章

  1. 进程管理supervisor的简单说明
  2. UE4中的主要材料和光线跟踪
  3. 调用未知DLL中的导出函数
  4. 多平台聚合直播PHP源码
  5. 【渝粤教育】电大中专机电设备管理作业 题库
  6. python相比于c语言更静态_Python的几种实现
  7. jxta-amalto
  8. 互联网周刊2022汽车智能服务企业TOP50
  9. 关于程序代码的时间复杂度
  10. Spring实战第五章idea复现
  11. LLC谐振变换器工作模态分析
  12. Cura切片3d打印设置
  13. excel 公式标多级目录序号
  14. git 报错fatal: cannot create directory at ‘../../..‘: Permission denied
  15. mate 10android o主题,华为Mate 10 Pro体验:这才是全面屏手机该有的样子
  16. ios13 无法传参_iOS13.1 正式版来了,加入了降频功能
  17. 一级计算机考试模拟知识点,计算机一级MSOffice考试模拟试题附答案
  18. toastr的介绍和使用
  19. window本机与虚拟机之间互相复制粘贴
  20. xinput1 3.dll修复方法,哪种xinput1 3.dll修复方法更推荐?

热门文章

  1. vb与数据库(二)之迟到的学生信息管理系统总结
  2. 白板随手一画,嗖嗖变成代码
  3. 微信翻译团队课余也搞围棋AI:比腾讯绝艺更强,首次亮相就夺冠
  4. 福特在迈阿密开始探索自动驾驶商业模式:先送比萨试试
  5. 当心币圈高仿号!也别指望AI,它有心无力
  6. 如何让强化学习走进现实世界?DeepMind要用“控制套件”推动
  7. 【leetcode】1053. Previous Permutation With One Swap
  8. Linux用户与组命令之groupadd
  9. wpf listBox 多列大图片效果
  10. K/3 WISE期初余额调整和出库异常调整的差别