<address id="xpjh9"><listing id="xpjh9"><meter id="xpjh9"></meter></listing></address>

<address id="xpjh9"><address id="xpjh9"><listing id="xpjh9"></listing></address></address>
<noframes id="xpjh9">
<noframes id="xpjh9">

<address id="xpjh9"><address id="xpjh9"><listing id="xpjh9"></listing></address></address>
    <form id="xpjh9"></form><address id="xpjh9"><listing id="xpjh9"><menuitem id="xpjh9"></menuitem></listing></address>

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

      • 2019-04-13 19:28 來源:未知

      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中輸入剛才變量地址,可以驗證上面所說的情況

      相關教程
      江苏快3 大庆 | 诸暨 | 肥城 | 长葛 | 普洱 | 唐山 | 临沧 | 吉安 | 徐州 | 黄冈 | 宜都 | 蚌埠 | 长葛 | 辽源 | 沛县 | 河南郑州 | 泗阳 | 漳州 | 绵阳 | 景德镇 | 寿光 | 宿州 | 东莞 | 平凉 | 承德 | 桂林 | 中山 | 铜川 | 襄阳 | 聊城 | 宁波 | 琼中 | 黑龙江哈尔滨 | 河源 | 博罗 | 正定 | 张家界 | 三明 | 三明 | 株洲 | 通化 | 黑龙江哈尔滨 | 馆陶 | 长兴 | 新沂 | 文山 | 赤峰 | 新沂 | 新余 | 黔东南 | 鹰潭 | 乐山 | 承德 | 义乌 | 九江 | 大庆 | 那曲 | 沧州 | 宜昌 | 丹阳 | 锡林郭勒 | 海宁 | 诸暨 | 济南 | 平潭 | 塔城 | 铜陵 | 阳春 | 上饶 | 灵宝 | 双鸭山 | 潮州 | 吉林 | 眉山 | 云浮 | 海拉尔 | 正定 | 大庆 | 三明 | 乐山 | 河池 | 玉树 | 洛阳 | 梧州 | 吉安 | 伊春 | 湖北武汉 | 三亚 | 德阳 | 三门峡 | 韶关 | 六安 | 松原 | 恩施 | 杞县 | 象山 | 甘肃兰州 | 改则 | 邹城 | 曲靖 | 顺德 | 垦利 | 荆州 | 黑河 | 海拉尔 | 大庆 | 衡水 | 库尔勒 | 赣州 | 烟台 | 威海 | 泰安 | 三沙 |