linux c程序内存泄漏检测工具-mtrace工具介绍

笔者也是最近去面试被问到怎么做内存泄漏检查,之前都是靠人工屏蔽代码、或者PC-link/KW一类的检查工具进行检查,回来后搜索了下,才知道linux自带的就有mtrace工具。

具体操作步骤如下:

1.在linux下创建test.c文件,编写如下代码:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4
 5 #include <mcheck.h>
 6
 7
 8 int main()
 9 {
10     setenv("MALLOC_TRACE","malloc.log",1);
11     mtrace();
12
13
14     char* text = (char*)malloc(sizeof(char)*100);
15     memset(text,0,100);
16     memcpy(text,"hello,world!",12);
17     printf("%s\n",text);
18     return 0;
19 }

2.保存退出后用,gcc -g text.c -o test.out进行编译;

3.执行./test.out

4.执行命令mtrace test.out malloc.log,2-4步骤的结果如下

[email protected]:~$ gcc -g test.c -o test.out
[email protected]-virtual-machine:~$ ./test.out
hello,world!
[email protected]-virtual-machine:~$ mtrace test.out malloc.log
- 0x0000000000700010 Free 4 was never alloc‘d 0x7fc09fee4e9d
- 0x0000000000700210 Free 5 was never alloc‘d 0x7fc09ffaf91f
- 0x0000000000700230 Free 6 was never alloc‘d 0x7fc0a001f23c

Memory not freed:
-----------------
           Address     Size     Caller
0x00000000007006a0     0x64  at /home/wqb/test.c:14
[email protected]-virtual-machine:~$ 

其中0x00000000007006a0 0x64 at /home/wqb/test.c:14 表明test.c的14行有内存泄漏。

原文地址:https://www.cnblogs.com/biaodi1900/p/9249406.html

时间: 2024-11-05 20:45:00

linux c程序内存泄漏检测工具-mtrace工具介绍的相关文章

Linux下c++程序内存泄漏检测代码范例

Linux下对于程序内存泄漏检测的方法很多,最常用的的莫过于使用valgrind工具.但是valgrind相当于让程序在虚拟机中运行,会带来较大的系统资源开销,还会对程序的运行效率产生较大影响,对于那种资源占用大的程序,如果需要长时间运行才能暴露的泄漏问题,它就显得不太好用. linux下的c++程序中自己实现一个轻量级的泄漏检测代码其实是比较方便的,下面我就给出一个简单的范例,并作简单的说明.当然,我们还是应该提倡使用共享指针,用共享指针自动管理内存可以避免内存泄漏这样的不必要的麻烦. 基本原

Unix下C程序内存泄漏检测工具Valgrind安装与使用

Unix下C程序内存泄漏检测工具Valgrind安装与使用 Valgrind是一款用于内存调试.内存泄漏检测以及性能分析的软件开发工具. Valgrind的最初作者是Julian Seward,他于2006年由于在开发Valgrind上的工作获得了第二届Google-O'Reilly开源代码奖. Valgrind遵守GNU通用公共许可证条款,是一款自由软件. 官网 http://www.valgrind.org 下载与安装 #wget http://www.valgrind.org/downlo

Linux C/C++内存泄漏检测工具:Valgrind

Valgrind 是一款 Linux下(支持 x86.x86_64和ppc32)程序的内存调试工具,它可以对编译后的二进制程序进行内存使用监测(C语言中的malloc和free,以及C++中的new和delete),找出内存泄漏问题. Valgrind 中包含的 Memcheck 工具可以检查以下的程序错误: 使用未初始化的内存 (Use of uninitialised memory) 使用已经释放了的内存 (Reading/writing memory after it has been f

如何使用Valgrind memcheck工具进行C/C++的内存泄漏检测

系统编程中一个重要的方面就是有效地处理与内存相关的问题.你的工作越接近系统,你就需要面对越多的内存问题.有时这些问题非常琐碎,而更多时候它会演变成一个调试内存问题的恶梦.所以,在实践中会用到很多工具来调试内存问题. Valgrind是运行在Linux上一套基于仿真技术的程序调试和分析工具,它包含一个内核--一个软件合成的CPU,和一系列的小工具,每个工具都可以完成一项任务──调试,分析,或测试等.Valgrind可以检测内存泄漏和内存违例,还可以分析cache的使用等,灵活轻巧而又强大,能直穿程

Linux内存泄漏检测

如题,就工具而言主要包括valgrind.mtrace.dmalloc和memwatch等,具体使用请参照以下连接 Linux C内存泄露检测工具 http://blog.sina.com.cn/s/blog_4b9216f50100e6o7.html Linux C/C++ 内存泄漏检测工具:Valgrind http://zyan.cc/post/419/ 就内存泄漏检测的理论和实现请参照以下连接: 一个跨平台的 C++ 内存泄漏检测器 http://www.ibm.com/develope

VS2005内存泄漏检测方法[转载]

一.非MFC程序可以用以下方法检测内存泄露: 1. 程序开始包含如下定义: #ifdef _DEBUG #define DEBUG_CLIENTBLOCK new( _CLIENT_BLOCK, __FILE__, __LINE__) #else #define DEBUG_CLIENTBLOCK #endif   // _DEBUG #define _CRTDBG_MAP_ALLOC #include #include #ifdef _DEBUG #define new   DEBUG_CLI

C/C++应用程序内存泄漏检查统计方案

一.前绪 C/C++程序给某些程序员的几大印象之一就是内存自己管理容易泄漏容易崩,笔者曾经在一个产品中使用C语言开发维护部分模块,只要产品有内存泄漏和崩溃的问题,就被甩锅“我的程序是C#开发的内存都是托管的,C++那边也没有内存(庇护其好友),肯定是C这边的问题”(话说一个十几年的程序员还停留在语言层面不觉得有点low吗),笔者毕业不到一年,听到此语心里一万头草泥马奔腾而过,默默地修改了程序,注意不是修改bug(哈哈),而是把所有malloc和free都替换成了自定义宏MALLOC和FREE,d

Unix下C程序内存泄露检测工具:valgrind的安装使用

Valgrind是一款用于内存调试.内存泄漏检测以及性能分析的软件开发工具. Valgrind的最初作者是Julian Seward,他于2006年由于在开发Valgrind上的工作获得了第二届Google-O'Reilly开源代码奖. Valgrind遵守GNU通用公共许可证条款,是一款自由软件. Valgrind的安装和使用 去官网www.valgrind.org下载最新版本的valgrind,我这里下载的是valgrind 3.11.0.tar.bz2. #tar xvf valgrind

Linux c内存泄漏检测

在Linux下些C语言程序,最大的问题就是没有一个好的编程IDE,当然想kdevelop等工具都相当的强大,但我还是习惯使用kdevelop工具,由于没有一个习惯的编程IDE,内存检测也就成了在Linux下编写程序的一个大问题. 是不是说没有一种内存检查工具能够在Linux使用呢,也不是,像valgrind工具还是相当不错的.他的下载地址是 http://valgrind.org/downloads /current.html#current 下载一个valgrind 3.2.3 (tar.bz