8

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

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

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

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

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

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

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

有没有办法做到这一点?

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

4

3 回答 3

7

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

于 2012-10-29T13:13:31.480 回答
6

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 命令。

于 2012-10-29T15:28:38.727 回答
0

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

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