zoukankan      html  css  js  c++  java
  • 详细说说在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扩展命令开始调试你的问题

    现在我们可以用sos.dll文件.

    这里有一些说明:不能运行本地命令,如kb、dc等;你不能跑~*e这意味着你不能跑~*e!clrstack查看所有线程上的堆栈但是,您可以在sos.dll扩展的!dumpdomain, !dumpheap等。

     为特定于线程的命令切换线程上下文,如!clrstack和!dumpstackobjects可以打开threads窗口(debug/windows/threads)并双击要切换到的线程。稍后我将展示一个例子。。。

    我知道很多人开始使用windbg有点困难,因为它意味着你需要学习一个全新的工具集,而且非常诚实的说,windbg不像visual studio那样“适合初学者”,然后,它主要用于事后调试,这对大多数人来说并不是一项日常任务。希望通过上面的信息你仍然可以开始使用sos.dll文件在舒适熟悉的visual studio调试环境中。

  • 相关阅读:
    MVVM教程[资源+分析]
    WPF 多点触摸开发[1]:Windows 7 安装多点触屏模拟器
    wpf 打印 之PirintVisual
    WPF:PrintVisual的问题
    几个漂亮的Button的CSS
    很不错的后台界面收集[提供下载]
    网页刷新方法集合
    JS各种各样的拖动效果
    CSS+DIV(盒子)
    网页刷新方法集合
  • 原文地址:https://www.cnblogs.com/yilang/p/13161874.html
Copyright © 2011-2022 走看看