亚洲精品中文字幕无乱码_久久亚洲精品无码AV大片_最新国产免费Av网址_国产精品3级片

操作系統(tǒng) 百分網手機站

教你如何檢查inux操作系統(tǒng)的內存

時間:2020-11-13 13:31:24 操作系統(tǒng) 我要投稿

教你如何檢查inux操作系統(tǒng)的內存

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

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

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

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

  4. 運行被檢查程序, 直至結束或muntrace被調用.

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

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

  如果有內存泄漏, mtrace會輸出分配泄漏

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

  附加說明

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

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

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

  For C++ Leak:

  檢查內存泄漏的方法除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/

  調試方法如下:

  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調試選項

  $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)空間的代碼具體位置。

【教你如何檢查inux操作系統(tǒng)的內存】相關文章:

1.操作系統(tǒng)內存優(yōu)化的攻略總結

2.Windows XP操作系統(tǒng)內存性能優(yōu)化

3.Android操作系統(tǒng)的內存回收的策略是什么

4.教你拯救XP操作系統(tǒng)假死三招妙計

5.如何選擇電腦操作系統(tǒng)

6.如何加固XP操作系統(tǒng)

7.DDR4內存是否支持win7操作系統(tǒng)

8.如何解決java內存泄漏的問題