为什么使用WinDbg与Visual Studio(VS)调试器?

时间:2008-09-19 20:11:56

标签: visual-studio windbg

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

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

8 个答案:

答案 0 :(得分:65)

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

您实际上不需要运行安装,只需将文件复制并准备就绪即可。它还会安装adsplus.vb,因此您可以对运行进程进行小型转储。设置执行远程调试也非常容易。没有什么比能够从你自己的桌面调试问题更好的了,而不是对抗在测试PC上闪烁的15英寸显示器。

对于日常代码编写,我使用Visual Studio,但是一旦您需要从其他计算机开始调试问题或发现自己处于非常丑陋的状态,windbg是唯一的方法。花一些时间学习windbg是一项很好的投资。此外,如果您查看崩溃转储,有两个很好的资源http://www.dumpanalysis.org/bloghttp://blogs.msdn.com/ntdebugging/default.aspx可以使用windbg进行所有调试。

答案 1 :(得分:11)

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

答案 2 :(得分:6)

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

.loadby sos mscorwks

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

!help

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

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

答案 3 :(得分:3)

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

答案 4 :(得分:3)

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

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

问题:

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

解决方案:

  • 请勿使用visual studio。
  • 使用“-server”
  • 在目标上运行用户模式windbg
  • 让目标的windbg启动您的应用。
  • 在主机上,使用“-remote”启动第二个与目标连接的windbg。
  • 如果TCP连接中断,则只在主机上启动另一个windbg实例,并且不会丢失任何内容。您的应用程序没有死亡,因为控制用户模式windbg进程正在目标上运行。

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

答案 5 :(得分:2)

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

答案 6 :(得分:2)

最新的visual studio是否仍然缺少与windbg的“-o”相同的功能,使调试器自动附加到子进程?对于必须从复杂的.bat文件运行的应用程序或者分叉和退出父进程的应用程序非常有用。

答案 7 :(得分:1)

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