最稳的pk10计划iphone 北京pk10计划手机软件 北京pk10数字的规律 超神手机版pk10软件 pk10北京赛车9码技巧 pk10四期倍投计划表 pk10极速赛车论坛 北京赛车冠军怎样选5码 北京赛车系统下载安装 pk10教程视频 北京pk10选号公式 北京赛车pk10赚钱技巧 北京赛车怎么提升概率 pk10技巧北京快三 北京pk10大小计划
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中輸入剛才變量地址,可以驗證上面所說的情況

pk10赛车冠军技巧
最稳的pk10计划iphone 北京pk10计划手机软件 北京pk10数字的规律 超神手机版pk10软件 pk10北京赛车9码技巧 pk10四期倍投计划表 pk10极速赛车论坛 北京赛车冠军怎样选5码 北京赛车系统下载安装 pk10教程视频 北京pk10选号公式 北京赛车pk10赚钱技巧 北京赛车怎么提升概率 pk10技巧北京快三 北京pk10大小计划
斗鱼直播唱歌怎么赚钱吗 东北麻将打夹胡技巧 黑杰克玩法 中国福利彩票查询 北京麻将攻略 极速pk10 一起来捉妖 怎么赚钱 2017年体彩p3开奖结果 dnf传说灵魂怎样赚钱