使用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属性->调试->启用非托管代码调试,如下图所示:

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

Step3 设置Symbol目录:
    如果不设置Symbol目录,运行下面的命令时会提示“PDB symbol for mscorwks.dll not loaded”,这里我们只需要再设置下Symbol目录就行了:菜单->工具->选项->调试->符号,设置如下:


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


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

! help
-------------------------------------------------------------------------------
SOS 
is  a debugger extension DLL designed to aid  in  the debugging of managed
programs. Functions are listed by category, then roughly 
in  order of
importance. Shortcut names 
for  popular functions are listed  in  parenthesis.
Type 
" !help <functionname> "   for  detailed info on that function. 

Object Inspection                  Examining code and stacks
-----------------------------        -----------------------------
DumpObj (
do )                       Threads
DumpArray (da)                     CLRStack
DumpStackObjects (dso)             IP2MD
DumpHeap                           U
DumpVC                             DumpStack
GCRoot                             EEStack
ObjSize                            GCInfo
FinalizeQueue                      EHInfo
PrintException (pe)                COMState
TraverseHeap                       BPMD 

Examining CLR data structures      Diagnostic Utilities
-----------------------------        -----------------------------
DumpDomain                         VerifyHeap
EEHeap                             DumpLog
Name2EE                            FindAppDomain
SyncBlk                            SaveModule
DumpMT                             GCHandles
DumpClass                          GCHandleLeaks
DumpMD                             VMMap
Token2EE                           VMStat
EEVersion                          ProcInfo 
DumpModule                         StopOnException (soe)
ThreadPool                         MinidumpMode DumpAssembly                       
DumpMethodSig                      
DumpRuntimeTypes                   Other
DumpSig                            
-----------------------------
RCWCleanupList                     FAQ
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,如需转载请自行联系原作者

相关文章
|
12月前
|
存储 程序员 编译器
Visual Studio 2022 程序员必须知道高效调试手段与技巧(下)终章
Visual Studio 2022 程序员必须知道高效调试手段与技巧(下)终章
111 0
|
1月前
|
微服务
微服务实践之使用 Visual Studio 2022 调试Dapr 应用程序
微服务实践之使用 Visual Studio 2022 调试Dapr 应用程序
47 3
|
2月前
在visual studio中调试程序 管理员权限添加
在visual studio中调试程序 管理员权限添加
57 0
|
8月前
VisualStudio 调试 添加命令行参数
VisualStudio 调试 添加命令行参数
57 0
|
12月前
|
存储 程序员 C++
Visual Studio 2022 程序员必须知道高效调试手段与技巧(中)
Visual Studio 2022 程序员必须知道高效调试手段与技巧(中)
160 0
|
12月前
|
程序员 C++ Windows
Visual Studio 2022 程序员必须知道高效调试手段与技巧(上)
Visual Studio 2022 程序员必须知道高效调试手段与技巧(上)
197 0
|
12月前
|
开发框架 .NET C#
Visual Studio Code调试和发布ASP.NET Core Web应用
Visual Studio Code调试和发布ASP.NET Core Web应用
130 0
|
Rust NoSQL 编译器
Rust在Visual Studio Code中调试提示debug type is not supported
Rust在Visual Studio Code中调试提示debug type is not supported
261 0
Rust在Visual Studio Code中调试提示debug type is not supported
|
前端开发 API 开发者
.NET Web应用配置本地IIS(实现Visual Studio离线运行与调试
.NET Web应用配置本地IIS(实现Visual Studio离线运行与调试
325 0
.NET Web应用配置本地IIS(实现Visual Studio离线运行与调试
|
存储 JSON JavaScript
简说Visual Studio代码进行调试
前端编程很有趣,开发人员有能力创建他们想要的任何东西,任何效果。不幸的是,当遇到bug时,这种乐趣就会消失。JavaScript开发人员可能首先想到的是alert、console.log语句。添加console.log()是可视化代码状态的一种快速方法。
280 0
简说Visual Studio代码进行调试