国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Linux > 正文

關(guān)于Linux操作系統(tǒng)下內(nèi)存泄漏的檢查方法

2024-07-26 00:37:40
字體:
供稿:網(wǎng)友
 

1. 在需要內(nèi)存泄漏檢查的代碼的開始調(diào)用void mtrace(void) (在mcheck.h中? 有聲明). mtrace為malloc等函數(shù)安裝hook, 用于記錄內(nèi)存分配信息.在需要內(nèi)存泄漏檢查的代碼的結(jié)束調(diào)用void muntrace(void).

注意: 一般情況下不要調(diào)用muntrace, 而讓程序自然結(jié)束. 因為可能有些釋放內(nèi)存代碼要到muntrace之后才運行.

2. 用debug模式編譯被檢查代碼(-g或-ggdb)

3. 設(shè)置環(huán)境變量MALLOC_TRACE為一文件名, 這一文件將存有內(nèi)存分配信息.

4. 運行被檢查程序, 直至結(jié)束或muntrace被調(diào)用.

5. 用mtrace命令解析內(nèi)存分配Log文件($MALLOC_TRACE)

(mtrace foo $MALLOC_TRACE, where foo is the executible name)

如果有內(nèi)存泄漏, mtrace會輸出分配泄漏

內(nèi)存的代碼位置,以及分配數(shù)量.

附加說明

1. 可以將mtrace, muntrace放入信號處理函數(shù)(USR1, USR2), 以動態(tài)地進行內(nèi)存泄漏檢查控制.

2. mtrace是個perl代碼, 如果你對符號地址與代碼文本的轉(zhuǎn)換感興趣, 可以讀一下.

3. again, 盡量不要用muntrace()

For C++ Leak:

檢查內(nèi)存泄漏的方法除glibc提供外;還可以試試一些專用的程序。

很奇怪,redhat 9 居然不帶mtrace perl腳本,只好下載gcc源碼編譯了

wget --passive-ftp ftp://rpmfind.net/linux/redhat/9 ... -2.3.2-11.9.src.rpm

rpm -ivh glibc*.src.rpm

cd /usr/src/redhat/SPECS/

rpmbuild -ba glibc-9.spec

cd /var/tmp/glibc-2.3.2-root/usr/bin/

cp mtrace /usr/bin/

調(diào)試方法如下:

vi a.c

1 #include

2

3 int main()

4 {

5 mtrace();

6 malloc(10);

7 malloc(16);

8 return 0;

9 }

$gcc -g a.c #記得編譯帶-g調(diào)試選項

$export MALLOC_TRACE=a.log

$./a.out

$unset MALLOC_TRACE #記得執(zhí)行完后unset變量,否則可能運行其他命令可能覆蓋log

$mtrace a.out a.log

Memory not freed:

-----------------

Address Size Caller

0x09b08378 0xa at /XXX/a.c:6

0x09b08388 0x10 at /XXX/a.c:7

可以看到,會顯示未釋放動態(tài)空間的代碼具體位置。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 东兰县| 桂东县| 抚顺市| 黎城县| 中西区| 海南省| 炎陵县| 皮山县| 吉木乃县| 朝阳县| 鄂托克前旗| 县级市| 鄯善县| 文化| 兴化市| 秦安县| 湖北省| 绥德县| 恭城| 申扎县| 孟津县| 临洮县| 睢宁县| 平利县| 永修县| 鄂伦春自治旗| 汪清县| 永吉县| 宿松县| 德安县| 绥阳县| 无为县| 洞头县| 浦城县| 古浪县| 松滋市| 凤凰县| 剑阁县| 康马县| 达州市| 临潭县|