• (转)LeakDiag使用手记


    LeakDiag是微软一款检测memory leak的工具,使用比较简单

    首先去下载一个http://www.cnblogs.com/lsmdiao0812/admin/ftp://ftp.microsoft.com/PSS/Tools/Developer%20Support%20Tools/LeakDiag/

    安装好,默认是在c:\leakdiag



    然后写一个测试程序来测试

    #include <stdio.h>
    #include 
    <windows.h>

    int main()
    {
        
    while(1)
        {
            
    char *= new char[10];
            printf(
    "%s",c);
            Sleep(
    1000);
        }
        
    return 0;
    }

    在LeakDiag中选择aaa.exe
    然后选择Windows Heap Allocator来跟踪heap的使用,按start开始,等一会按log,然后再stop
    会在c:\leakdiag\Logs下面生成一个log

    关键的部分是
    <LEAKS ver="1.25.28.2201">
    <STACK numallocs="05" size="048" totalsize="0240">
    <STACKSTATS>
    <SIZESTAT size="048" numallocs="05"/>
    <HEAPSTAT handle="340000" numallocs="05"/>
    </STACKSTATS>
    <FRAME num="0" dll="aaa.exe" function="" filename="" line="" addr="0x407a72" offset="0x00007A72" />
    <FRAME num="1" dll="aaa.exe" function="" filename="" line="" addr="0x402ff2" offset="0x00002FF2" />
    <FRAME num="2" dll="aaa.exe" function="" filename="" line="" addr="0x402df9" offset="0x00002DF9" />
    <FRAME num="3" dll="aaa.exe" function="" filename="" line="" addr="0x402dd6" offset="0x00002DD6" />
    <FRAME num="4" dll="aaa.exe" function="" filename="" line="" addr="0x40112f" offset="0x0000112F" />
    <FRAME num="5" dll="aaa.exe" function="" filename="" line="" addr="0x401038" offset="0x00001038" />
    <FRAME num="6" dll="aaa.exe" function="" filename="" line="" addr="0x401269" offset="0x00001269" />
    <FRAME num="7" dll="KERNEL32.dll" function ="GetSortTablesFileInfo" offset="0xC" filename="" line="" addr="0x7C5989D5" />
    <STACKID>00524008</STACKID>
    </STACK>
    </LEAKS>

    其中numallocs是分配的次数,size是每次分配的大小,frame则是leak的时候的call stack
    这里的stack只显示了binary,是因为symbol没有配好

    把对应的pdb文件路径加到[Tools]-[Option]-Symbol search path,就能得到
    <LEAKS ver="1.25.28.2201">
    <STACK numallocs="06" size="048" totalsize="0288">
    <STACKSTATS>
    <SIZESTAT size="048" numallocs="06"/>
    <HEAPSTAT handle="340000" numallocs="06"/>
    </STACKSTATS>
    <FRAME num="0" dll="aaa.exe" function ="_heap_alloc_base" offset="0xC2" filename="malloc.c" line="200" addr="0x407A72" />
    <FRAME num="1" dll="aaa.exe" function ="_heap_alloc_dbg" offset="0x1A2" filename="dbgheap.c" line="378" addr="0x402FF2" />
    <FRAME num="2" dll="aaa.exe" function ="_nh_malloc_dbg" offset="0x19" filename="dbgheap.c" line="248" addr="0x402DF9" />
    <FRAME num="3" dll="aaa.exe" function ="_nh_malloc" offset="0x16" filename="dbgheap.c" line="197" addr="0x402DD6" />
    <FRAME num="4" dll="aaa.exe" function ="operator new" offset="0xF" filename="new.cpp" line="24" addr="0x40112F" />
    <FRAME num="5" dll="aaa.exe" function ="main" offset="0x28" filename="D:\Test\aaa\test.cpp" line="8" addr="0x401038" />
    <FRAME num="6" dll="aaa.exe" function ="mainCRTStartup" offset="0xE9" filename="crt0.c" line="206" addr="0x401269" />
    <STACKID>00524008</STACKID>
    </STACK>
    </LEAKS>

    由test.cpp line 8引起的memory leak.

    BTW: 据说有一个tool叫LDParser来分析leakdiag生成的log,哪位大侠有,希望提供一下,谢谢!
  • 相关阅读:
    在Android模拟器(BlueStacks)中调试录音应用【20121221】
    一路来的脚印_停第二念【20130109】
    Office集锦_Word_禁止在粘帖内容前后添加空格【201318】
    Libgdx使用过程中在Android环境下遇到的各种错误提示的解决【2012112】
    童真趣语【20121217】
    【转】Android中的资源分析、读取【2012113】
    Office集锦_Word_禁止拼写检查【201318】
    BlueStacks中用户自己的SdCard的位置【2012116】
    Eclipse+BlueStacks调试Android应用_补充篇【20121030】
    The Power of H3D2 ! 截图,视频!
  • 原文地址:https://www.cnblogs.com/lancidie/p/1896414.html
Copyright © 2020-2023  润新知