首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | 镜像站
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
搜索中心 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>编程开发>其他编程>正文

Linux内存泄漏的检查方法

http://www.oklinux.cn  2008-09-18  linuxidc   会员收藏  游客收藏  【 】 
您查看的文章来源于http://www.oklinux.cn

  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会输出分配泄漏
  内存的代码位置,以及分配数量.
  附加说明
  1. 可以将mtrace, muntrace放入信号处理函数(USR1, USR2), 以动态地进行内存泄漏检查控制.
  2. mtrace是个perl代码, 如果你对符号地址与代码文本的转换感兴趣, 可以读一下.
  3. again, 尽量不要用muntrace()
  For C Leak:
  检查内存泄漏的方法除glibc提供外;还可以试试一些专用的程序。
  很奇怪,redhat 9 居然不带mtrace perl脚本,只好下载gcc源码编译了
  wget --passive-ftp ftp://rpmfind.net/linux/redhat/9... -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
  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
  可以看到,会显示未释放动态空间的代码具体位置。


上一篇:Linux下安装Oracle 10G提示“bad interpreter: 权限不够”的解决   下一篇:关于Linux fork()函数的工作机制

收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·关于Linux fork()函数的工作机制
·Linux Shell位置参数
·Linux添加路径到PATH
·不安装Linux也可学习Linux命令的方法
·初识Linux脚本编程(shell)
·Linux shell 检查进程PID
·Ubuntu 8.04下的嵌入式开发环境建立
·Linux内核中Kconfig文档的作用
·Linux下线程调用sleep,进程挂起
·开发环境:从Windows到Linux
·创建XWindow全屏窗口(Linux可视化编程)
·红旗Linux内核与系统性能
·Linux下一类通用错误的解决方法
·Linux下的groupadd问题
·终于对Linux Kernel有了点认识
·Linux内核编译过程
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·不安装Linux也可学习Linux命令的方法
·Linux添加路径到PATH
·Linux Shell位置参数
·关于Linux fork()函数的工作机制
·初识Linux脚本编程(shell)
·Linux shell 检查进程PID
·Ubuntu 8.04下的嵌入式开发环境建立
·Linux内核中Kconfig文档的作用
·Linux下线程调用sleep,进程挂起
·开发环境:从Windows到Linux
·创建XWindow全屏窗口(Linux可视化编程
·红旗Linux内核与系统性能
  阅读排行
·Linux下Qtopia Core 4.3(QT/E)交叉编译
·开源空间 网络安全工具开发函数库Libne
·Linux编程时获取当前时间实例解析
·Linux环境下OpenGL编程学习
·Linux socket编程实例:echo服务器程序
·升级Redhat Linux 9.0内核有感
·Linux中断处理学习笔记
·Linux环境下重新编译GCC-4.3.0
·GNU/Linux应用程序编程:用管道进行编
·Linux系统中限制用户进程CPU及内存占用
·Linux下安装g77 fortran complier过程
·解决Linux中Matlab中文乱码问题
·Linux环境下Wine的中文显示以及freetyp
·Linux多线程编程学习之线程同步
·SUSE Linux中安装Quartus 7.2过程笔记
网摘收藏: