以前看了《用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 (包含連接)