<i id='ylnvt'><div id='ylnvt'><ins id='ylnvt'></ins></div></i>
  1. <acronym id='ylnvt'><em id='ylnvt'></em><td id='ylnvt'><div id='ylnvt'></div></td></acronym><address id='ylnvt'><big id='ylnvt'><big id='ylnvt'></big><legend id='ylnvt'></legend></big></address>
    <dl id='ylnvt'></dl>
    1. <fieldset id='ylnvt'></fieldset>

      <ins id='ylnvt'></ins>
      <i id='ylnvt'></i>

        <code id='ylnvt'><strong id='ylnvt'></strong></code>
        1. <tr id='ylnvt'><strong id='ylnvt'></strong><small id='ylnvt'></small><button id='ylnvt'></button><li id='ylnvt'><noscript id='ylnvt'><big id='ylnvt'></big><dt id='ylnvt'></dt></noscript></li></tr><ol id='ylnvt'><table id='ylnvt'><blockquote id='ylnvt'><tbody id='ylnvt'></tbody></blockquote></table></ol><u id='ylnvt'></u><kbd id='ylnvt'><kbd id='ylnvt'></kbd></kbd>
          <span id='ylnvt'></span>

          关于Linux系统下内存泄漏的检查方法

          • 时间:
          • 浏览:4
          • 来源:124软件资讯网
            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 linux/redhat/9">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
             
              可以看到  ,会显示未释放动态空间的代码详细位置