详细说说在Vistual studio IDE里使用SOS.dll扩展调试程序
Posted yilang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了详细说说在Vistual studio IDE里使用SOS.dll扩展调试程序相关的知识,希望对你有一定的参考价值。
通常,我写的问题只在生产环境中表现出来,每次执行某个操作时,您不能在受控开发环境中真实再现这些问题。在这些情况下,您需要使用windbg之类的工具来收集转储并进行事后调试。Windbg对于这些类型的问题非常有效,但它有其缺点,因为它不是真正的托管调试器,所以在.NET代码中设置断点或单步执行代码,甚至像在visual Studio这样的托管调试器中那样以可视方式检查对象都要困难得多。
另一方面,Visual Studio不允许您像windbg那样进行事后调试,而且没有简单的方法可以查看进程中加载的域的信息或查看.net堆上的对象的信息。
我的同事遇到了一个很容易重现的问题,但他需要两个世界,即从代码到一个特定的点,可视化地查看堆栈上的对象,同时他需要查看堆上的内容,因此他求助于附加两个调试程序,管理visual studio调试和windbg调试与sos一起原生以查看托管堆。这是相当恶劣的,有一个更容易的方法来结合这两个世界。。。在Visual Studio中使用sos进行调试。
有很多网友看了我的《VisualStudio中集成扩展调试SOS》,说不够细,确实那篇随笔只是大致讲了主要的步骤,很多的朋友是在卡在第二步,也就是对立即窗口的使用。
下面我将使用Visual Studio来向您展示如何在其中加载sos并运行sos命令。
步骤一:为项目启用本机调试
为了加载类似于SOS.dll文件您必须在本机模式下进行调试,因此在启动调试器之前,请进入项目上下文菜单上的Project/Properties/Debug,并选中“启用非托管代码调试”复选框。
步骤二:调试并中断
像在Visual Studio中一样调试问题,直到重现问题为止。
中断进程(调试菜单/全部中断)
步骤三:加载SOS.dll扩展
为了装载sos.dll文件你必须打开“立即”窗口(Debug/Windows/Immediate or Ctrl+D, I),并输入如下命令:
.load C:WINDOWSMicrosoft.NETFrameworkv4.0.30319sos.dll
若执行成功,会输出:
extension C:WINDOWSMicrosoft.NETFrameworkv4.0.30319sos.dll loaded
个人试验,VS2013里,加载2.0版本成功率高,4.0版本多半失败
步骤四:用sos扩展命令开始调试你的问题
这里有一些说明:不能运行本地命令,如kb、dc等;你不能跑~*e这意味着你不能跑~*e!clrstack查看所有线程上的堆栈但是,您可以在sos.dll扩展的!dumpdomain, !dumpheap等。
为特定于线程的命令切换线程上下文,如!clrstack和!dumpstackobjects可以打开threads窗口(debug/windows/threads)并双击要切换到的线程。稍后我将展示一个例子。。。
我知道很多人开始使用windbg有点困难,因为它意味着你需要学习一个全新的工具集,而且非常诚实的说,windbg不像visual studio那样“适合初学者”,然后,它主要用于事后调试,这对大多数人来说并不是一项日常任务。希望通过上面的信息你仍然可以开始使用sos.dll文件在舒适熟悉的visual studio调试环境中。
以上是关于详细说说在Vistual studio IDE里使用SOS.dll扩展调试程序的主要内容,如果未能解决你的问题,请参考以下文章
Vistual Studio建立的Web应用发布到本地IIS服务器
最强IDE更流行,微软发布Visual Studio 2017新版路线图