1. <wbr id="m8vu6"></wbr>

      <del id="m8vu6"><center id="m8vu6"><source id="m8vu6"></source></center></del>
        <p id="m8vu6"><sub id="m8vu6"></sub></p>

        VB.net 2010 視頻教程 VB.net 2010 視頻教程 python基礎視頻教程
        SQL Server 2008 視頻教程 c#入門經典教程 Visual Basic從門到精通視頻教程
        當前位置:
        首頁 > 編程開發 > c#教程 >
        • C#教程之C#教程之初次使用Windbg檢查C#程序內存

        本站最新發布   C#從入門到精通
        試聽地址  
        http://www.squ68.com/eschool/CSharpxin3721/

        1. 下載windbg并安裝。

        我下載的是 Windbg 6.12。注意,windbg分32位和64位,由分析環境的位數決定。我這里安裝的是32位的。安裝過程很簡單,一路next就可以。

        2. 準備被調試的程序。

        新建一個C#控制臺程序,使用如下代碼。編譯~

         View Code

        3. 到bin/debug目錄下,運行創建的程序

        4. 打開Windbg。

        初次使用,需要加載符號文件。選擇菜單: File - Symbol File Path,輸入:

         srv*d:\SymbolsLocal*http://msdl.microsoft.com/download/symbols

        5. 附件到進程

        選擇 File - Attach to a process,然后在彈出的窗口中選擇我們正在運行的控制臺程序

        6. 加載 sos 工具

        如下圖。然后輸入 .chain,用于確認sos.dll確實被加載。

        7. 獲得主線程上的引用

        輸入命令:  ~0s 

         

        8. 輸出主線程上的線程棧信息

        輸入命令  !clsstack -l 。可以看到,main方法有一個局部變量,地址是 0x020c2350

        9. 輸出局部變量的信息

        !dumpobj /d 0x020c2350 。如下圖

        打印出來的內容:

        Name:類名

        MethodTable:方法表地址

        Size:占用內存空間多少字節

        紅色框里,是該對象所有字段的詳細信息表格,包含每個字段的MT(方法表地址)、Offset(相對偏移量)、類型、VT(=1:值類型,=0:引用類型)、Attr(靜態的還是實例的)、字段值、字段名稱

        注意,在offset中,可以看到每個字段在內存的分布,如下圖。

         

        這么分布是為了字段對齊。即,CLR為了節省空間,各個字段在內存中,并不是按代碼定義的順序進行分布的,而是把byte字段合到一起,讓它們共同占用4個字節。int每個變量占4個字節。就形成了上圖的分布。

        10. 查看內存情況

        選擇菜單 View - Memory,在Virtual中輸入剛才變量地址,可以驗證上面所說的情況

        相關教程
                
        免费看成年人视频大全_免费看成年人视频在线观看