最令linux程序员头疼的莫过于内存泄露了,即使你是在优秀的程序员,你也不能保证所以的malloc操作都有对应的free,那必要的工具就是必不可少的了。在一般的linux发行版中,有一个自带的工具可以很方便的替你完成这些事,这个工具就是mtrace。
下面是它的用法
可以看出,只需要在你的程序中插入三行代码,就行。
第一句,#include <mcheck.h>,包含头文件
第二句,setenv("MALLOC_TRACE", "output", 1);output表示输出的中间文件
第三句,mtrace(),调用mtrace.
将这个文件编译,注意,编译的时候一地要加上gcc的-g选项。
gcc mtrace_test.c -g -o mtrace_test
接着执行可执行文件,然后你会发现当前目录下多了一个output的文件。
这个文件自然不是文本文件,所以需要工具来查看。
$ mtrace mtrace_test output
这时会打印出一串信息
- 0x000000000129a010 Free 3 was never alloc'd 0x7f62844d89ba
- 0x000000000129a100 Free 4 was never alloc'd 0x7f6284583a1d
- 0x000000000129a120 Free 5 was never alloc'd 0x7f62845d20ec
Memory not freed:
-----------------
Address Size Caller
0x000000000129a5a0 0x64 at /home/dianping/peter/mtrace/mtrace_test.c:12
其它别的直接忽略,注意那句要命的 Memory not freed,caller表示那段代码对应的malloc操作没有释放。顺便说一句,如果你编译的时候没有使用-g的选项,那么Caller这个地方就不会出现代码的信息,而是一串二进制的地址信息。
另外还有两个工具据说也不错dmalloc和memwatch,不过我没用过,以后用到了在写下使用方法吧
分享到:
相关推荐
总的来说,Mtrace是Linux环境下调试内存溢出和泄漏问题的强大工具。通过简单地在程序中插入`mtrace()`调用,设置环境变量,然后运行和分析日志,开发者就能有效地定位内存管理中的错误,从而提高程序的稳定性和效率...
### 内存溢出:Linux下使用Mtrace检查程序内存溢出 #### 一、内存溢出概述 内存溢出是指程序申请的内存超过系统所能提供的空闲内存时出现的一种异常现象。通常情况下,内存溢出会导致程序崩溃或运行异常。在Linux...
"memleak-0.3.0.tar.gz" 和 "mtrace.tar.gz" 是两个压缩包文件,它们提供了用于检测内存泄露的工具。让我们深入探讨这两个工具以及它们如何帮助解决这个问题。 `memleak.c` 和 `memleak.h` 是 `memleak-0.3.0.tar` ...
本资料集主要探讨了Linux环境下C语言的内存控制函数,这些函数在编写高效、安全的C程序时至关重要。 1. `malloc()` 函数:这是最常用的动态内存分配函数,用于向系统申请指定大小的内存空间。其原型为`void* malloc...
- **内存分配调试库**:例如*njamd*,提供内存泄漏检测等功能。 - **GCC扩展**:如*BGCC/SSP*,增强编译时的安全性。 - ***grind/DRD**:动态分析工具,帮助检测内存错误。 #### 六、GDB/KGDB详解 GDB和KGDB是文档...
例如,mtrace是一个简单的内存泄漏追踪工具,用于检测malloc/free配对使用的错误。其他工具,如Valgrind,提供更高级的内存泄漏检测和分析功能。 总结来说,系统集成测试是保证软件质量的关键步骤,涉及多个层次的...