详细说说在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:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\sos.dll
若执行成功,会输出:
extension C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\sos.dll loaded
个人试验,VS2013里,加载2.0版本成功率高,4.0版本多半失败
步骤四:用sos扩展命令开始调试你的问题
- 上一篇: 仅通过转储来排除内存泄漏
- 下一篇: 使用Java中的InputStream读取文件数据