使用SOS - 在Visual Studio中启用非托管代码调试来支持本机代码调试


   SOS(Son of Strike)扩展调试器可以用来显示CLR数据结构的内容。SOS是作为.net framework的一部分安装的(SOS.dll),位于%windir%\Microsoft.NET\Framework\v*.*.****(版本号)\目录下。在使用SOS(加载SOS.dll)进行调试的步骤:
Step1 在Visual Studio中设置项目属性,以启动托管调试:Visual Studio打开要调试的项目,菜单->项目(Project)->Project属性->调试->启用非托管代码调试,如下图所示:
使用SOS - 在Visual Studio中启用非托管代码调试来支持本机代码调试

Step2 在代码中设置断点->F5启动调试,运行到断点处;

Step3 设置Symbol目录:
    如果不设置Symbol目录,运行下面的命令时会提示“PDB symbol for mscorwks.dll not loaded”,这里我们只需要再设置下Symbol目录就行了:菜单->工具->选项->调试->符号,设置如下:
使用SOS - 在Visual Studio中启用非托管代码调试来支持本机代码调试


Step4 菜单->调试(Debug)->窗口(Windows)->即时(Immediate),在打开的“即时窗口”中输入“!load sos.dll”来加载SOS.dll,如果加载成功,则会提示“已加载扩展%windir%\Microsoft.NET\Framework\v*.*.****(版本号)\sos.dll”;
使用SOS - 在Visual Studio中启用非托管代码调试来支持本机代码调试


Step5 在“即时窗口”中输入“!help”可以获得调试命令列表(如下),输入"!help <command>" 可以获得该命令的详细信息.

使用SOS - 在Visual Studio中启用非托管代码调试来支持本机代码调试!help
使用SOS - 在Visual Studio中启用非托管代码调试来支持本机代码调试
-------------------------------------------------------------------------------
使用SOS - 在Visual Studio中启用非托管代码调试来支持本机代码调试SOS 
is a debugger extension DLL designed to aid in the debugging of managed
使用SOS - 在Visual Studio中启用非托管代码调试来支持本机代码调试programs. Functions are listed by category, then roughly 
in order of
使用SOS - 在Visual Studio中启用非托管代码调试来支持本机代码调试importance. Shortcut names 
for popular functions are listed in parenthesis.
使用SOS - 在Visual Studio中启用非托管代码调试来支持本机代码调试Type 
"!help <functionname>" for detailed info on that function. 
使用SOS - 在Visual Studio中启用非托管代码调试来支持本机代码调试
使用SOS - 在Visual Studio中启用非托管代码调试来支持本机代码调试Object Inspection                  Examining code and stacks
使用SOS - 在Visual Studio中启用非托管代码调试来支持本机代码调试
-----------------------------      -----------------------------
使用SOS - 在Visual Studio中启用非托管代码调试来支持本机代码调试DumpObj (
do)                       Threads
使用SOS - 在Visual Studio中启用非托管代码调试来支持本机代码调试DumpArray (da)                     CLRStack
使用SOS - 在Visual Studio中启用非托管代码调试来支持本机代码调试DumpStackObjects (dso)             IP2MD
使用SOS - 在Visual Studio中启用非托管代码调试来支持本机代码调试DumpHeap                           U
使用SOS - 在Visual Studio中启用非托管代码调试来支持本机代码调试DumpVC                             DumpStack
使用SOS - 在Visual Studio中启用非托管代码调试来支持本机代码调试GCRoot                             EEStack
使用SOS - 在Visual Studio中启用非托管代码调试来支持本机代码调试ObjSize                            GCInfo
使用SOS - 在Visual Studio中启用非托管代码调试来支持本机代码调试FinalizeQueue                      EHInfo
使用SOS - 在Visual Studio中启用非托管代码调试来支持本机代码调试PrintException (pe)                COMState
使用SOS - 在Visual Studio中启用非托管代码调试来支持本机代码调试TraverseHeap                       BPMD 
使用SOS - 在Visual Studio中启用非托管代码调试来支持本机代码调试
使用SOS - 在Visual Studio中启用非托管代码调试来支持本机代码调试Examining CLR data structures      Diagnostic Utilities
使用SOS - 在Visual Studio中启用非托管代码调试来支持本机代码调试
-----------------------------      -----------------------------
使用SOS - 在Visual Studio中启用非托管代码调试来支持本机代码调试DumpDomain                         VerifyHeap
使用SOS - 在Visual Studio中启用非托管代码调试来支持本机代码调试EEHeap                             DumpLog
使用SOS - 在Visual Studio中启用非托管代码调试来支持本机代码调试Name2EE                            FindAppDomain
使用SOS - 在Visual Studio中启用非托管代码调试来支持本机代码调试SyncBlk                            SaveModule
使用SOS - 在Visual Studio中启用非托管代码调试来支持本机代码调试DumpMT                             GCHandles
使用SOS - 在Visual Studio中启用非托管代码调试来支持本机代码调试DumpClass                          GCHandleLeaks
使用SOS - 在Visual Studio中启用非托管代码调试来支持本机代码调试DumpMD                             VMMap
使用SOS - 在Visual Studio中启用非托管代码调试来支持本机代码调试Token2EE                           VMStat
使用SOS - 在Visual Studio中启用非托管代码调试来支持本机代码调试EEVersion                          ProcInfo 
使用SOS - 在Visual Studio中启用非托管代码调试来支持本机代码调试DumpModule                         StopOnException (soe)
使用SOS - 在Visual Studio中启用非托管代码调试来支持本机代码调试ThreadPool                         MinidumpMode DumpAssembly                       
使用SOS - 在Visual Studio中启用非托管代码调试来支持本机代码调试DumpMethodSig                      
使用SOS - 在Visual Studio中启用非托管代码调试来支持本机代码调试DumpRuntimeTypes                   Other
使用SOS - 在Visual Studio中启用非托管代码调试来支持本机代码调试DumpSig                            
-----------------------------
使用SOS - 在Visual Studio中启用非托管代码调试来支持本机代码调试RCWCleanupList                     FAQ
使用SOS - 在Visual Studio中启用非托管代码调试来支持本机代码调试DumpIL


    安装VS2003时,也会安装SOS的帮助文档,位于目录Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\Tool Developers Guide\Samples\sos下;但VS2005中貌似没有安装该帮助文档,这里有更详细的文档http://msdn2.microsoft.com/en-us/library/ms954594.aspx...。我将这两份文档放在我的cnblogs上,可以从这里(http://files.cnblogs.com/happyhippy/sos.rar)下载。


本文转自Silent Void博客园博客,原文链接:http://www.cnblogs.com/happyhippy/archive/2007/04/11/710930.html,如需转载请自行联系原作者