内存泄漏检查方法(for Linux) 
如果你更想读原始文档, 请参考glibc info的"Allocation Debugging" 
一章 (执行info libc);
glibc提供了一个检查内存泄漏的方法, 前提是你的程序使用glibc的标准函数分配内存(如malloc, alloc...):
1.在需要内存泄漏检查的代码的开始调用void mtrace(void) (在mcheck.h中有声明)。mtrace为malloc等函数安装hook, 用于记录内存分配信息。
在需要内存泄漏检查的代码的结束调用void muntrace(void)。注意: 一般情况下不要调用muntrace, 而让程序自然结束. 因为可能有些释放内存代码要到muntrace之后才运行。
2. 用debug模式编译被检查代码(-g或-ggdb) 
3. 设置环境变量MALLOC_TRACE为一文件名, 这一文件将存有内存分配信息. 
4. 运行被检查程序, 直至结束或muntrace被调用. 
5. 用mtrace命令解析内存分配Log文件($MALLOC_TRACE) 
(mtrace foo $MALLOC_TRACE, where foo is the executible name) 
如果有内存泄漏,mtrace会输出分配泄漏 
内存的代码位置,以及分配数。

For C++ Leak: 
检查内存泄漏的方法除glibc提供外; 
还可以试试一些专用的程序;如: 
ccmalloc
mpatrol
这俩个工具的功能相当不错,能对程序进行相当全面的检查 
很奇怪,redhat 9 居然不带mtrace perl脚本,只好下载gcc源码编译了
wget --passive-ftp ftp://rpmfind.net/linux/redhat/9/en/os/i386/SRPMS/glibc-2.3.2-11.9.src.rpm
rpm -ivh glibc*.src.rpm
cd /usr/src/redhat/SPECS/
rpmbuild -ba glibc-9.spec 
cd /var/tmp/glibc-2.3.2-root/usr/bin/
cp mtrace /usr/bin/
 
调试方法如下:
vi a.c

1 #include <mcheck.h>
      2 
      3 int main()
      4 {
      5 mtrace();
      6 malloc(10);
      7 malloc(16);
      8 return 0;
      9 }

$gcc -g a.c #记得编译带-g调试选项 
$export MALLOC_TRACE=a.log 
$./a.out 
$unset MALLOC_TRACE #记得执行完后unset变量,否则可能运行其他命令可能覆盖log 
$mtrace a.out a.log 
Memory not freed:
-----------------
   Address     Size     Caller
0x09b08378      0xa  at /XXX/a.c:6
0x09b08388     0x10  at /XXX/a.c:7

可以看到,会显示未释放动态空间的代码具体位置.

转自:http://lagignition.blog.163.com/blog/static/128730023201072421016361/

最新文章

  1. 写启动界面Splash的正确姿势,解决启动白屏(转)
  2. Ubuntu下apt-get命令详解
  3. kylin查询出现日期对应不上的情况
  4. [读书笔记]C#学习笔记五: C#3.0自动属性,匿名属性及扩展方法
  5. C++ enum
  6. nodejs for centos配置
  7. rootkit的检测工具使用(chkrootkit和rootkit hunter)
  8. c#图像处理入门
  9. python自动化测试应用-第7篇(WEB测试)--Selenium进阶篇
  10. [Swift]LeetCode1033. 移动石子直到连续 | Moving Stones Until Consecutive
  11. Jenkins安装及配置
  12. Unity 处理预设中的中文
  13. bootmgr is conmpressed联想Z485
  14. 【Linux】防火墙与CentOS中的iptables
  15. Bzoj4558:分类讨论 计算几何 组合数学
  16. Map HashMap 排序 迭代循环 修改值
  17. jQuery 阻止冒泡和默认事件
  18. Redis 【string】 一句话说明
  19. log4j:WARN No appenders could be found for logger 解决办法
  20. 「6月雅礼集训 2017 Day1」看无可看

热门文章

  1. Ubuntu 脚本笔记
  2. vue2.x 路由懒加载 优化打包体积
  3. FlexPaper:使用flash在线展示pdf
  4. the-implementation-of-epoll
  5. Spanner_
  6. Techniques for HA IT Management
  7. .NET+MVC+Alipay的Sdk版单笔转账到支付宝账户接口
  8. vscode 换行符\n 变成\r\n
  9. [Windows Azure] Load Testing in Windows Azure
  10. 转axios 的应用