<fieldset id='3w7jo'></fieldset>

<code id='3w7jo'><strong id='3w7jo'></strong></code>
<ins id='3w7jo'></ins>

            <span id='3w7jo'></span>
            <i id='3w7jo'></i>

            <acronym id='3w7jo'><em id='3w7jo'></em><td id='3w7jo'><div id='3w7jo'></div></td></acronym><address id='3w7jo'><big id='3w7jo'><big id='3w7jo'></big><legend id='3w7jo'></legend></big></address>
          1. <dl id='3w7jo'></dl>

            <i id='3w7jo'><div id='3w7jo'><ins id='3w7jo'></ins></div></i>
          2. <tr id='3w7jo'><strong id='3w7jo'></strong><small id='3w7jo'></small><button id='3w7jo'></button><li id='3w7jo'><noscript id='3w7jo'><big id='3w7jo'></big><dt id='3w7jo'></dt></noscript></li></tr><ol id='3w7jo'><table id='3w7jo'><blockquote id='3w7jo'><tbody id='3w7jo'></tbody></blockquote></table></ol><u id='3w7jo'></u><kbd id='3w7jo'><kbd id='3w7jo'></kbd></kbd>
          3. 关于Linux系统下内存泄漏的检查方法

            • 时间:
            • 浏览:18
            • 来源: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
               
                可以看到 ,会显示未释放动态空间的代码详细位置