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

使用WinDbg与Visual Studiodebugging器的主要原因是什么?

它通常用作Visual Studiodebugging器的完全替代品,或者更多用于需要时。

如果您想知道为什么要在Visual Studio上使用windbg,那么您需要阅读“ 高级Windowsdebugging” 。 任何时候你需要debugging一个真正丑陋的问题windbg比Visual Studio有更好的技术来做到这一点。 Windbg有一个更强大的脚本语言,并允许您编写DLL来自动化难题。 它将安装gflags.exe,这使您可以更好地控制堆debugging内存覆盖。

您实际上并不需要运行安装,只需将这些文件复制并准备好即可。 它也安装adsplus.vb,所以你可以采取微型运行进程转储。 设置执行远程debugging也很容易。 没有什么比能够从自己的办公桌上debugging问题更好的了,而不是与在testingPC上闪烁的15“显示器作斗争。

对于日常代码编写,我使用Visual Studio,但是一旦您需要从其他计算机debugging问题或发现自己处于一个非常糟糕的情况,windbg是唯一的出路。 花一些时间学习windbg是一项巨大的投资。 另外,如果你看崩溃转储,有两个很好的资源, http : //www.dumpanalysis.org/blog和http://blogs.msdn.com/ntdebugging/default.aspx ,使用windbg做所有的debugging。

这里有一些进一步的链接来帮助使用WinDbg ,大多数是.NET特定的。

  • John Robbins谈到了使用cmdtree创build一个命令窗口。
  • 这是一个快速的WinDbg / SOS备忘单 。
  • 如果发生故障,修复它应该有一堆WinDbg / Sos相关的文章,主要围绕debuggingASP.NET。
  • 以下是MSDN的SOS概述。 这是关于.NET 1.1,所以它的年龄正在显示。

您不指定是否在debugging本机代码或托pipe代码。 它不会影响答案,WinDbg对于两者都是非常有用的,但很多人认为WinDbg在debugging.NET应用程序时不太相关。 不是这样。 作为奖励,您可以通过在WinDbg中使用SOS扩展来debugging.NET应用程序,从而了解.NET平台如何工作。 在WinDbg中运行(或附加)您的.NET应用程序,然后键入…

.loadby sos mscorwks 

…确保您加载正在使用的CLR版本的正确扩展名。 然后键入…

 !help 

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

我听说它开玩笑说微软只有一个开发工具,而且是WinDbg。 你可能想要debugging的所有东西都在那里,或者在一个扩展中。 当然,这些东西的一个子集也可以在一个友好的用户界面… 🙂

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

混合内核debugging加上远程用户模式debugging。

AFAIK,visual studio 仍然不能在我描述为“解决scheme”的模式下进行远程debugging。 这是一个很好的理由使用windbg。

问题:

  • 设置横跨1394年windbg。您的应用程序运行在“目标”上。 Windbg运行在“主机”上。
  • 在主机上运行visual studio
  • 有Visual Studio使用远程工具在目标上启动您的应用程序。
  • 打入内核模式windbg停止目标
  • 等待Visual Studio的TCP连接超时
  • windbg中的“g”来停止目标
  • 当远程监控器意识到networking连接消失时观察您的应用程序“popup”
  • 重新启动你的app 🙁

解:

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

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

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

最新的visual studio仍然缺less一个等同于windbg的“-o”,使debugging器自动附加到subprocess? 对于必须从复杂的.bat文件或者分叉和退出父进程的应用程序运行的应用程序非常有用。

我总是喜欢手表和跟踪function:“wt” – >它打印到输出窗口,所有的函数调用发生。 这是非常酷的东西!