<pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

          <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

          <p id="bbfd9"></p>

          <p id="bbfd9"><cite id="bbfd9"></cite></p>

            <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

            <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
            <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>
            操作系統

            教你如何檢查inux操作系統的內存

            時間:2025-05-15 14:56:16 操作系統 我要投稿
            • 相關推薦

            教你如何檢查inux操作系統的內存

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

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

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

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

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

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

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

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

              內存的代碼位置,以及分配數量.

              附加說明

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

              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 #記得執行完后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

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

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

            操作系統內存優化的攻略總結03-27

            Windows XP操作系統內存性能優化06-03

            Android操作系統的內存回收的策略是什么12-18

            Java內存是如何劃分的03-30

            電腦內存如何搭配06-01

            內存故障如何檢測07-31

            如何擴大電腦內存08-09

            如何學習操作系統12-08

            舊電腦內存如何升級03-14

                    <pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

                    <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

                    <p id="bbfd9"></p>

                    <p id="bbfd9"><cite id="bbfd9"></cite></p>

                      <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

                      <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
                      <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>
                      飘沙影院