2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > linux 内存泄露工具 linux下检查内存泄露的工具--mtrace

linux 内存泄露工具 linux下检查内存泄露的工具--mtrace

时间:2020-06-06 14:37:19

相关推荐

linux 内存泄露工具 linux下检查内存泄露的工具--mtrace

下面是它的用法

#include

#include

#include

#include

intmain(){

setenv("MALLOC_TRACE","output",1);

mtrace();

char*text=(char*)malloc(sizeof(char)*100);

memset(text,'/0',100);

memcpy(text,"hello,world!",12);

printf("%s/n",text);

return0;

}

可以看出,只需要在你的程序中插入三行代码,就行。

第一句,#include ,包含头文件

第二句,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,不过我没用过,以后用到了在写下使用方法吧

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。