嵌入式软件内存泄露工具mtrace使用方法

mtrace是一个有效的工具来查看有没有内存泄漏。它会将内存出现的异常记录在日志中,而日志的路径是可以指定的。

使用mtrace来调试程序有4个基本的步骤,需要用到GNUC函数库里面的一些辅助的函数功能。

1.在需要跟踪的程序中需要包含头文件<mcheck.h>,而且在main()函数的最开始包含一个函数调用:mtrace()。由于在 main函数的最开头调用了mtrace(),所以该进程后面的一切分配和释放内存的操作都可以由mtrace来跟踪和分析。
2
定义一个环境变量,用来指示一个文件。该文件用来输出log信息。如下的例子:
$export MALLOC_TRACE=mymemory.log
3
正常运行程序。此时程序中的关于内存分配和释放的操作都可以记录下来。
4
然后用mtrace使用工具来分析log文件。例如:

 

1. #include<stdio.h>

2. #include<stdlib.h>

3. #include<mcheck.h>

4. #include<assert.h>

5.  

6. int main()

7. {

8.  

9.     assert(!setenv("MALLOC_TRACE","./malloc.log",1)) ;

10.    mtrace();

11.     int *= malloc(100*sizeof(int));

12. 

13.        return 0;

14.}

 

mtrace会将内存情况记录下来,记录的结果存在什么地方呢?由环境变量MALLOC_TRACE决定。所以实际上有两种设置环境变量的方法,一种情况就是代码中体现的:

1、setenv函数设定环境变量 MALLOC_TRACE

 

setenv("MALLOC_TRACE","./malloc.log",1)

 

2、shell设定环境变量MALLOC_TRACE

exportMALLOC_TRACE=~/program/C/MEM_CHECK/memcheck.log

 

 

1. root@libin:~/program/C/mem_bug#gcc -o test test.c -g

2. root@libin:~/program/C/mem_bug#./test

3. root@libin:~/program/C/mem_bug#ll

4. 总用量 28

5. drwxr-xr-x 2root root 4096 2012-04-03 12:17 ./

6. drwxr-xr-x 36root root 4096 2012-04-03 12:01 ../

7. -rw-r--r-- 1root root 155 2012-04-03 12:17 malloc.log

8. -rwxr-xr-x 1root root 8550 2012-04-03 12:17 test*

9. -rw-r--r-- 1root root 208 2012-04-03 12:17 test.c

10.root@libin:~/program/C/mem_bug# mtrace ./test malloc.log

11.- 0x09a68008 Free 3 was never alloc'd 0x1da8ef

12.- 0x09a68028 Free 4 was never alloc'd 0x1da8f7

13. 

14.Memory not freed:

15.-----------------

16.Address Size Caller

17.0x09a683b0 0x190 at /home/libin/program/C/mem_bug/test.c:11

 

注意:由于嵌入式Linux下没有mtrace工具,故可以将生成的log文件拷贝到demo所在的共享目录下来使用mtrace工具查看。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值