• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            小明思考

            高性能服務(wù)器端計(jì)算
            posts - 70, comments - 428, trackbacks - 0, articles - 0
              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            LeakDiag使用手記

            Posted on 2008-08-18 19:12 小明 閱讀(23506) 評(píng)論(4)  編輯 收藏 引用 所屬分類: ToolsDebug
            LeakDiag是微軟一款檢測memory leak的工具,使用比較簡單

            首先去下載一個(gè)ftp://ftp.microsoft.com/PSS/Tools/Developer%20Support%20Tools/LeakDiag/

            安裝好,默認(rèn)是在c:\leakdiag



            然后寫一個(gè)測試程序來測試

            #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開始,等一會(huì)按log,然后再stop
            會(huì)在c:\leakdiag\Logs下面生成一個(gè)log

            關(guān)鍵的部分是
            <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是分配的次數(shù),size是每次分配的大小,frame則是leak的時(shí)候的call stack
            這里的stack只顯示了binary,是因?yàn)閟ymbol沒有配好

            把對(duì)應(yīng)的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: 據(jù)說有一個(gè)tool叫LDParser來分析leakdiag生成的log,哪位大俠有,希望提供一下,謝謝!

            Feedback

            # re: LeakDiag使用手記  回復(fù)  更多評(píng)論   

            2008-08-20 09:05 by true
            不錯(cuò)!

            # re: LeakDiag使用手記  回復(fù)  更多評(píng)論   

            2008-08-24 16:07 by dell電腦
            關(guān)于memory leak恐怕是每一種支持動(dòng)態(tài)分配內(nèi)存的語言中,都會(huì)遇到的。我們的server也一樣的leak。。。。

            # re: LeakDiag使用手記  回復(fù)  更多評(píng)論   

            2009-06-23 11:02 by Kelvin
            ftp://ftp.microsoft.com/PSS/Tools/Developer%20Support%20Tools/LDGrapher/

            可以下載這個(gè)比較兩個(gè)xml文件

            # re: LeakDiag使用手記  回復(fù)  更多評(píng)論   

            2012-04-01 15:17 by 客心悠哉
            LeakDiag 你還在用么?方便咨詢點(diǎn)問題么?
            久久精品成人欧美大片| 999久久久无码国产精品| 亚洲欧美一区二区三区久久| 久久99热精品| 中文成人久久久久影院免费观看| 国产精品日韩深夜福利久久 | 国产激情久久久久影院老熟女免费| 久久亚洲AV成人无码软件| 久久精品国产亚洲精品| 潮喷大喷水系列无码久久精品| 韩国免费A级毛片久久| 久久高清一级毛片| 久久精品无码一区二区三区日韩| 国内精品久久久久久麻豆| 狠狠色丁香婷婷久久综合不卡| 丰满少妇高潮惨叫久久久| 国产成人久久AV免费| 国产成人精品久久综合| 久久久久久亚洲精品不卡| 久久99久久无码毛片一区二区| 亚洲精品NV久久久久久久久久| 久久综合亚洲色HEZYO社区| 久久国产欧美日韩精品| 日韩亚洲欧美久久久www综合网| 国产精品久久久久久久午夜片| 久久精品国产福利国产琪琪| 青青热久久国产久精品 | 俺来也俺去啦久久综合网| 精品久久人人爽天天玩人人妻| 精品久久久久久成人AV| 国产情侣久久久久aⅴ免费| 国产精品天天影视久久综合网| 国产99久久久国产精品~~牛| 亚洲欧洲久久久精品| a高清免费毛片久久| 久久国产精品偷99| 久久久久亚洲AV成人网人人软件| 精品久久无码中文字幕| 9久久9久久精品| 2021国产精品午夜久久 | 久久久久久久久久久免费精品|