mtrace
是乙個有效的工具來檢視有沒有記憶體洩漏。它會將記憶體出現的異常記錄在日誌中,而日誌的路徑是可以指定的。
使用mtrace
來除錯程式有
4個基本的步驟,需要用到
gnuc
函式庫裡面的一些輔助的函式功能。 1
.在需要跟蹤的程式中需要包含標頭檔案
,而且在
main()
函式的最開始包含乙個函式呼叫:
mtrace()
。由於在
main
函式的最開頭呼叫了
mtrace()
,所以該程序後面的一切分配和釋放記憶體的操作都可以由
mtrace
來跟蹤和分析。2.
定義乙個環境變數,用來指示乙個檔案。該檔案用來輸出
log資訊。如下的例子:
$export malloc_trace=mymemory.log3.
正常執行程式。此時程式中的關於記憶體分配和釋放的操作都可以記錄下來。4.
然後用mtrace
使用工具來分析
log檔案。例如:
1.
#include
<
stdio.h
>
2.
#include
<
stdlib.h
>
3.
#include
<
mcheck.h
>
4.
#include
<
assert.h
>
5.
6.
intmain
()
7.
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工具檢視。
Linux C 程式設計記憶體洩露檢測工具 mtrace
所有使用動態記憶體分配 dynamic memory allocation 的程式都有機會遇上記憶體洩露 memory leakage 問題,在linux裡有三種常用工具來檢測記憶體洩露的情況,包括 mtrace dmalloc memwatch mtrace是三款工具之中是最簡單易用的,mtrac...
嵌入式工具 tcpdump
tcpdump是非常強大的網路安全分析工具,可以將網路上截獲的資料報儲存到檔案以備分析。可以定義過濾規則,只截獲感興趣的資料報,以減少輸出檔案大小和資料報分析時的裝載和處理時間。版本 libpcap 1.4.0 和 tcpdump 4.4.0 編譯方法 上述需要的兩個包要解壓在同乙個目錄下,先編譯l...
嵌入式記憶體布局
從事手機平台研發也有一年多了,總結了一下有關手機記憶體方面的知識希望對新手有所裨益。如果有高手路過檢視之餘如有紕漏之處還請不吝賜教 說明 傳統 燒機 流程將軟體燒錄到flash中,軟體bootloader部分在nor flash中,軟體的其他部分燒錄到nand flash 強調一點 上圖左邊部分是f...