62

使用WinDbg与 Visual Studio 调试器的主要原因是什么?

它通常用作 Visual Studio 调试器的完全替代品,还是在需要时更多地使用。

4

8 回答 8

71

如果您想知道为什么应该使用 windbg 而不是 Visual Studio,那么您需要阅读Advanced Windows Debugging。任何时候你需要调试一个真正丑陋的问题时,windbg 都有比 Visual Studio 更好的技术来解决它。Windbg 具有更强大的脚本语言,并允许您编写 DLL 来自动解决难题。它将安装 gflags.exe,它使您可以更好地控制堆以调试内存覆盖。

您实际上不需要运行安装,只需将文件复制过来即可开始安装。它还安装 adsplus.vb,因此您可以对正在运行的进程进行迷你转储。设置执行远程调试也很容易。没有什么比能够在自己的办公桌上调试问题而不是与测试 PC 上闪烁的 15 英寸显示器作斗争更好的了。

对于日常代码编写,我使用 Visual Studio,但是一旦您需要从其他计算机开始调试问题或发现自己处于非常丑陋的境地,windbg 是唯一的出路。花一些时间学习windbg是一项巨大的投资。此外,如果您查看故障转储,则有两个很好的资源,http ://www.dumpanalysis.org/blog和http://blogs.msdn.com/ntdebugging/default.aspx,它们使用 windbg 进行所有调试。

于 2008-09-19T20:35:21.670 回答
13

以下是一些有助于使用WinDbg的进一步链接,大多数是特定于 .NET 的。

于 2008-09-24T13:04:15.287 回答
6

您无需指定是在调试本机代码还是托管代码。它不影响答案,WinDbg 对两者都非常有用,但许多人认为 WinDbg 在调试 .NET 应用程序时的相关性较低。不是这样。作为奖励,您可以通过使用 SOS 扩展在 WinDbg 中调试您的 .NET 应用程序来了解很多关于 .NET 平台的工作原理。在 WinDbg 中运行(或附加到)您的 .NET 应用程序并键入...

.loadby sos mscorwks

...确保为使用中的 CLR 版本加载正确的扩展。然后输入...

!help

...查看 SOS 扩展中可用的命令。

我听有人开玩笑说微软只有一个开发工具,那就是 WinDbg。您可能想要进行调试的所有内容都在其中,或者在扩展中。当然,这些东西的一个子集也可以在具有更友好 UI 的 VS 中使用...... :-)

于 2008-09-23T09:11:03.780 回答
3

当我从 NT4.0 服务器发送 .dmp 文件时,我使用过它——MSVC 不会加载这些旧格式文件。

于 2008-09-19T20:13:54.123 回答
3

混合内核调试和远程用户模式调试。

AFAIK,Visual Studio仍然无法在我描述为“解决方案”的模式下进行远程调试。这是使用windbg 的一个很好的理由。

问题:

  • 跨 1394 设置 windbg。您的应用程序在“目标”上运行。Windbg 在“主机”上运行。
  • 在主机上运行 Visual Studio
  • 让 Visual Studio 使用远程工具在目标上启动您的应用程序。
  • 闯入内核模式windbg以停止目标
  • 等待足够长的时间让 Visual Studio 的 TCP 连接超时
  • windbg 中的“g”取消停止目标
  • 当远程监视器意识到网络连接消失时,观察您的应用程序“弹出”
  • 重新启动您的应用程序:(

解决方案:

  • 不要使用视觉工作室。
  • 使用“-server”在目标上运行用户模式windbg
  • 让目标的 windbg 启动您的应用程序。
  • 在主机上,启动第二个使用“-remote”连接到目标的windbg。
  • 如果 TCP 连接中断,只需在主机上启动另一个 windbg 实例,不会丢失任何内容。您的应用程序没有死,因为控制用户模式的 windbg 进程正在目标上运行。

此外,我发现在内核模式和用户模式下使用相同的调试器更容易,windbg 即使在用户模式下也非常强大,而且我可以在内核模式和用户模式实例中利用我自己的 windbg 扩展。

于 2009-02-11T07:21:10.317 回答
2

轻量级,无需安装在客户端机器上即可运行,速度快,可调试内核模式。

于 2008-09-19T20:16:04.120 回答
2

最新的 Visual Studio 是否仍然缺少与 Windbg 的“-o”等效的功能,它使调试器自动附加到子进程?对于必须从复杂的 .bat 文件运行的应用程序或派生并退出父进程的应用程序非常有用。

于 2009-02-11T07:24:05.990 回答
1

我一直很喜欢监视和跟踪功能:'wt' -> 它会在所有函数调用发生时将它们打印到输出窗口。那是很酷的东西!

于 2010-07-17T05:18:12.470 回答