【问题标题】:Stepping through Source Code using Windbg SOS Extension使用 Windbg SOS 扩展单步执行源代码
【发布时间】:2012-10-18 11:13:28
【问题描述】:

我最近从本机代码编程切换到托管代码编程。我正在使用 .NET。

由于我使用 Windbg 已经有一段时间了,我也想将它用于托管代码调试。

我的搜索把我带到了 SOS(罢工之子)扩展,它似乎有一些非常强大的命令。

尽管我了解 SOS 中使用的大多数命令,但我无法找到正确单步执行源代码的方法,就像我可以使用本地代码的 p 和 t 指令一样。

这使得调试体验变得困难,我真的很想在调试的时候单步调试代码。

我对此进行了一些研究,发现使用 6.7.05.0 版本的 Windbg 是可能的,其中 MS 似乎已经发布了集成托管调试,但在以后的版本中回滚了。

尽管如此,我对能够在通过 SOS 进行调试的同时实时单步调试“源”代码非常感兴趣。特别是因为它确实阻碍了我现在的调试体验。

有没有办法做到这一点?

感谢任何有关如何执行此操作(或实际解决方法)的帮助。

【问题讨论】:

    标签: .net debugging windbg managed sos


    【解决方案1】:

    如果您想要将源代码连接到 windbg,您可以按照以下步骤操作:

    1. 转到文件->源文件路径,选择包含源文件的文件夹。
    2. 转到查看->调用堆栈,它将打开一个新窗口。
    3. 在调用堆栈中导航并单击相关条目,它将打开一个带有代码浏览器的窗口。

    【讨论】:

      【解决方案2】:

      Windbg 擅长分析崩溃进程的小型转储。但它不是托管调试器。

      您可以通过在 Visual Studio 中加载 SOS 来享用蛋糕。这允许使用托管调试器中可用的常规调试工具,以及可以从 SOS 中获得的诊断。有一些限制:

      • 您必须启用非托管调试,项目 + 属性,调试选项卡,勾选选项
      • VS 是 32 位进程,因此您只能使用 32 位版本的 SOS。项目 + 属性,构建选项卡,如果您使用的是 64 位版本的 Windows,请确保您已选择 x86。

      开始调试并切换到即时窗口。键入.load sos.dll,您应该会看到类似extension C:\Windows\Microsoft.NET\Framework\v4.0.30319\sos.dll loaded 的消息。输入 !help 并确认您看到列出的 SOS 命令。

      【讨论】:

        【解决方案3】:

        尝试使用 !sosex.mt 和 !sosex.mgu。 'p' 命令应该像宣传的那样工作。

        【讨论】:

        • 嗨史蒂夫,很高兴收到来自 SOSEX 本身的开发者的回复..!我的主要目的是确保当我单步执行代码时,我可以看到调试器中突出显示的正确代码行。虽然我无法使用 SOS 执行此操作,但从您的回复中,我了解到“!sosex.mt”和“!sosex.mgu”将等同于本机代码的 t 和 gu。但是执行这些命令是否也会突出显示源窗口中的相应代码行?再次感谢您的回复!
        • 可能是在更高版本的 WinDbg 中,源同步无法正常工作。不幸的是,我无法控制那部分。但是,如果您使用 !muf 扩展名,您可以很好地与源代码同步。不如代码窗口中的高亮好,但是可以。
        • 谢谢史蒂夫。如果您能量化“WinDbg 的更高版本”究竟是什么,那会有所帮助?
        • 我不知道。自从我使用 WinDbg 的公共版本已经快 5 年了。我记得当我最初编写 sosex 的断点功能时,源窗口集成“刚刚工作”。
        • @SteveJohnson,在带有历史时间旅行调试的新 WinDbg 预览中,它允许返回到对象创建,这在某些调试情况下可能特别有用
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-07
        • 1970-01-01
        • 1970-01-01
        • 2019-05-21
        • 2011-04-02
        相关资源
        最近更新 更多