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已經被集成
到VS2012的IDE中。本文主要講解在VS2012中調用SOS的基本步驟
1 SOS是一個非托管的DLL,要使用SOS調試,首先需要打開本地的非托管代碼調試選項,
Debug--->Options and Settings --->Suppress JIT optimization on module load(Managed only),將其取消
然後需要打開項目的本地調試選項
project--->yourproname properties --->Debug--->Enable native code debugging
2 按步驟一設置好以後,就可以開始我們的SOS之旅了。
首先我們需要定位到運行的某個時刻,F9在某條語句上設置斷點,F5運行至Console.Read(),
然後我們打開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底層的世界其樂無窮,期待有心人去探索
來源於
http://www.cnblogs.com/marsblog/p/3275650.html
VS2012中使用SOS調試CLR