内存泄漏检查方法(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/

mtrace检查内存泄漏的更多相关文章

  1. 用mtrace检查内存泄漏

    http://blog.csdn.net/ixidof/article/details/6638066内存泄漏检查方法(for Linux) 如果你更想读原始文档, 请参考glibc info的&qu ...

  2. c++检查内存泄漏

    使用_CrtDumpMemoryLeaks()函数检查内存泄漏 #include <cstdio> #include <cstdlib> #include <crtdbg ...

  3. iOS开发 如何检查内存泄漏

    本文转载至 http://mobile.51cto.com/iphone-423391.htm 在开发的时候内存泄漏是不可避免的,但是也是我们需要尽量减少的,因为内存泄漏可能会很大程度的影响程序的稳定 ...

  4. ios--->instrument的leaks来检查内存泄漏

    instrument来检查内存泄漏 1.第一步打开 或者: 然后选择leaks 2.若此时编译出现如下问题,可能是非debug版本造成的,切换成debug版本即可 打开工程的Edit Scheme选项 ...

  5. UWP开发入门(十三)——用Diagnostic Tool检查内存泄漏

    因为.NET的垃圾回收机制相当完善,通常情况下我们是不需要关心内存泄漏的.问题人一但傻起来,连自己都会害怕,几个页面跳啊跳的,内存蹭蹭的往上涨,拉都拉不住.这种时候我们就需要冷静下来,泡一杯热巧克力. ...

  6. Android内存管理(14)*使用开源库LeakCanary检查内存泄漏

    1.简介 它是一个非常简单好用的内存泄漏检测工具库.可以轻松检测Activity,Fragment的内存泄漏.如果有内存泄漏,它会产生一个通知. 2.资料 官网: https://github.com ...

  7. 用windbg 检查内存泄漏

    1.下载编译https://github.com/0cch/luadbg 2.编写脚本1.txt .load luadbg_v15*.sympath+ srv*c:\MyServerSymbols*h ...

  8. valgrind 代码检查,内存泄漏

    使用平台 linux 下载 http://valgrind.org/ 文档 http://valgrind.org/docs/manual/manual.html 博客 https://www.osc ...

  9. malloc钩子和内存泄漏工具mtrace、Valgrind

    一:malloc钩子函数 static void* (* old_malloc_hook) (size_t,const void *);static void (* old_free_hook)(vo ...

随机推荐

  1. 启动 angular-phonecat 项目时出现这玩意 。('The header content contains invalid characters');

    最近学习angular, 跟着视频做一个动作,启动 “ angular-phonecat ” 这个项目 敲入 “npm start ” 启动没有问题,但是 "http://localhost ...

  2. 解决方案:android monkeyrunner:Timeout while trying to create chimp mananger(device = MonkeyRunner.waitForConnection()一直报错的问题)

    monkeyrunner在执行device = MonkeyRunner.waitForConnection()一直报错的问题 (或者[main] [com.android.chimpchat.adb ...

  3. 关于generate用法的总结

    Abtract generate语句允许细化时间(Elaboration-time)的选取或者某些语句的重复.这些语句可以包括模块实例引用的语句.连续赋值语句.always语句.initial语句和门 ...

  4. Struts2对值的推断

    目的是想将jsp中的input输入: <input class="inputstyle" type="text" value="<s:pr ...

  5. Debugging the Java HotSpot VM

    Open Heart Surgery: Analyzing and Debugging the Java HotSpot VM at the OS Level https://www.youtube. ...

  6. 服务器搭建3 安装libevent2.0.20

    1.检测是否安装 安装了的话应该是这样的:如果不是,那就装一下. root@iZ23nyl8frqZ:/home/upload# ls -a /usr/lib |grep libeventlibeve ...

  7. DIOCP开源项目-数据库连接池的使用<多帐套数据库>

    很久没有写DIOCP的Demo了,主要公司的事情太繁琐,工作之余都不想动了,之前承若的群里面朋友们的DEMO,昨天晚上恶补了一下,把对数据库连接池的操作加入到了Demo中,大家可以通过SVN下载到最新 ...

  8. 【Socket】linux高性能网络服务程序

    1.mystery引入 1)高性能的网络服务程序分为单线程重复式网络服务.多进程网络服务 .多线程网络服务.线程池网络服务和IO多路复用网络服务等 2)单线程重复式是最基本的一种TCP服务模式,其实现 ...

  9. js使用正则表达式实现文本框只能输入数字和小数点

    第一种情况:且限制小数点前最大3位数,小数点后最大3为三位 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN& ...

  10. 用nodejs http-server搭建本地服务环境

    一.本地环境,不包括域名的方法: https://www.npmjs.com/package/http-server(参考手册) 正确使用方法: