VS2012中使用SOS調試CLR

以前看了《用WinDbg探索CLR世界》的一些列文章,發現SOS真的是一個很是好的調試.net的工具,工具

而後又驚喜的在http://blogs.msdn.com/b/mariohewardt/archive/2012/06/05/visual-studio-2012-and-windbg-integration.aspx 上看到原來windbg已經被集成visual-studio

到VS2012的IDE中。本文主要講解在VS2012中調用SOS的基本步驟spa

1 SOS是一個非託管的DLL,要使用SOS調試,首先須要打開本地的非託管代碼調試選項,.net

Debug--->Options and Settings --->Suppress JIT optimization on module load(Managed only),將其取消debug

 

 

而後須要打開項目的本地調試選項3d

project--->yourproname properties --->Debug--->Enable native code debugging指針

 

2 按步驟一設置好之後,就能夠開始咱們的SOS之旅了。調試

首先咱們須要定位到運行的某個時刻,F9在某條語句上設置斷點,F5運行至Console.Read(),code

而後咱們打開immediate窗口,Debug--->Window--->Immediate對象

輸入.load SOS

輸入成功之後 會顯示

輸入! help能夠查看SOS的使用幫助,若是出現PDB symbol for clr.dll not loaded,能夠經過選中

Tools ---> Option--- > Debugging ----> Symbols-->Microsoft Symbol Servers’ checkbox來解決

 

3 若是咱們要查看某個對象的信息,能夠輸入!dumpstackobjects,查看全部在CLR中已經生成的對象信息,

接下來咱們看下object o的具體信息

輸入!dumpobj(019f240f),沒錯,括號中的參數就是dumpstackobjects命令所顯示的16進制數

 

由此能夠看到,一個空的對象在GC堆中佔用的內存是12個bytes,在<CLR VIR C#>中提到,其中有8個bytes是對象類型指針和同步索引快,剩下4個bytes爲空

頗有意思的是,若是咱們定義一個對象,只含有一個int型的私有字段,那麼它所佔用的內存也是12個bytes

本文就到這裏,CLR底層的世界其樂無窮,期待有心人去探索

做者:Mars

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

本文基於署名-非商業性使用 3.0中國大陸許可協議發佈,歡迎轉載,演繹或用於商業目的,可是必須保留本文的署名 Mars (包含連接)

相關文章
相關標籤/搜索