windbg 使用指南

來源:互聯網
上載者:User

項目接近尾聲了,可是在運行時會有memory leak(記憶體泄露) bug.產品在運行一天后,記憶體增長致1.4G,而我們產品的初始記憶體才有70M,問題很嚴重,決定採用WinDbg工具來分析代碼問題有原因到底在哪裡.

WinDbg是微軟發布的一款相當優秀的源碼級(source-level)調試工具,可以用於Kernel模式調試和使用者模式調試,還可以調試Dump檔案。

WinDbg下載:

  Install Debugging Tools for Windows 32-bit Version 
http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx 

  Install Debugging Tools for Windows 64-bit Versions 
http://www.microsoft.com/whdc/devtools/debugging/install64bit.mspx

 

配置

在安裝完WinDbg後,需要在我們開發電腦上配置兩個環境變數值,_NT_ALT_SYMBOL_PATH(調試的bin目錄)  和_NT_SYMBOL_PATH(symcache目錄),如

_NT_ALT_SYMBOL_PATH(調試的bin目錄):

_NT_SYMBOL_PATH(symcache目錄)

 

還要再配置下這個:

接下來運行WinDbg

 

把要調試的進程載入進去

 

這時最好在記憶體溢出很明顯的時候載入較好,等下調試時較明顯.

以下適合調試C++代碼(產品有用到C++庫,是C++和C#一起寫的代碼,C#調用C++庫)

運行命令

!heap -s

結果如下:

0:035> !heap -s 

  Heap     Flags   Reserv  Commit  Virt   Free  List   UCR  Virt  Lock  Fast 

                    (k)     (k)    (k)     (k) length      blocks cont. heap 

----------------------------------------------------------------------------- 

00250000 00000002    4096   3644   3672   1155   232     5    0      3   L  

    External fragmentation  31 % (232 free blocks) 

00360000 00001002    1088     72     72      1     0     1    0      0   L  

00370000 00008000      64     12     12     10     1     1    0      0      

016b0000 00001002      64     44     44      5     1     1    0      0   L  

017d0000 00041002     256     12     12      4     1     1    0      0   L  

01920000 00001002      64     44     44      5     1     1    0      0   L  

01a30000 00041002     256     40     40     12     3     1    0      0   L  

01c50000 00001002      64     32     32     24     1     1    0      0   L  

01f00000 00001002    1088    452    456     93    22     2    0      0   L  

02030000 00001002    7232   4828   5012    459   106    24    0      0   L  

021c0000 00001002      64     20     20      5     2     1    0      0   L  

04bb0000 00041002    1280    308    308      5     1     1    0      0   L  

05360000 00001002     256     16     16      3     1     1    0      0   L  

054a0000 00001002     256     12     12      4     1     1    0      0   L  

055e0000 00001002     256     12     12      4     1     1    0      0   L  

05720000 00001002     256     12     12      4     1     1    0      0   L  

05860000 00001002     256     12     12      4     1     1    0      0   L  

059c0000 00001002    3136   1772   1772    566    37     1    0      0      

    External fragmentation  31 % (37 free blocks) 

05ad0000 00001002     256     44     44      7     2     1    0      0   L  

05c10000 00001002     256     36     36     16     4     1    0      0   L  

080d0000 00001002    1088     56     84     47     4     3    0      0   L  

08740000 00001002    1024    524    628    480    14     7    0      0   L  

088b0000 00001002     256    160    200     25     5     2    0      0   L  

08dc0000 00001002      64     12     12      4     1     1    0      0   L  

09590000 00001002    1088    168    168      2     1     2    0      0   L  

0ce90000 00001002    1088     84     84     61     3     1    0      0   L  

-----------------------------------------------------------------------------

再運行命令 !heap –stat  -h  059c0000  因發現這個堆裡有較大的記憶體佔有量

結果如:

 

 

再運行 !heap -flt s 64 631 來查看堆裡的記憶體配置

結果如

 

 

找堆裡相似性高有地址,如,我的相似性非常高.

再運行!heap -p -a 0c903fe0

結果如

 

就會把調用到DLL的方法顯示出來,就是記憶體泄露的地方,由於出於項目的保密原因,涉及項目中的代碼中的資訊我去掉了.

 

 

這隻是WinDbg眾多功能中的一種,我把它記錄下來,因為這把我們項目的記憶體從1.4G降到了109M.功勞很大.

 

作者:spring yang

出處:http://www.cnblogs.com/springyangwc/

本文著作權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文串連,否則保留追究法律責任的權利。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.