1. 程式人生 > >linux c程序內存泄漏檢測工具-mtrace工具介紹

linux c程序內存泄漏檢測工具-mtrace工具介紹

std mac res AR urn %s \n 執行命令 check

筆者也是最近去面試被問到怎麽做內存泄漏檢查,之前都是靠人工屏蔽代碼、或者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步驟的結果如下

wqb@wqb-virtual-machine:~$ gcc -g test.c -o test.out
wqb@wqb-virtual-machine:~$ ./test.out 
hello,world!
wqb@wqb-virtual-machine:~$ mtrace test.out malloc.log
- 0x0000000000700010 Free 4 was never allocd 0x7fc09fee4e9d
- 0x0000000000700210 Free 5 was never allocd 0x7fc09ffaf91f
- 0x0000000000700230 Free 6 was never allocd 0x7fc0a001f23c

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

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

linux c程序內存泄漏檢測工具-mtrace工具介紹