2008-09-19 97 views

回答

61

如果你想知道为什么你应该使用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

3

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

2

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

6

你不指定你是在调试本机代码还是托管代码,它不会影响答案,WinDbg对于两者都非常有用,但很多人认为WinDbg在某种程度上不太相关当调试ng .NET应用程序。并非如此。作为奖励,您可以通过使用SOS扩展在WinDbg中调试.NET应用程序,了解.NET平台如何工作。跑起来(或连接到)你的.NET应用程序在WinDbg中和型......

.loadby sos mscorwks 

...以确保您加载使用的CLR版本的权利扩展。然后键入...

!help 

...查看SOS扩展中有哪些命令可用。

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

+4

如果您设置项目的调试属性并启用“非托管调试”,则可以将SOS扩展加载到Visual Studio中。启用非托管调试 - >在某处设置断点 - >运行 - >当您点击断点时,打开即时窗口(ctrl + alt + i)并键入.load sos。有关更多信息,请参阅http://blogs.msdn.com/vijaysk/archive/2007/11/15/sos-your-visual-studio.aspx。 – dss539 2009-06-04 19:26:39

3

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

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

问题:

  • 建立起覆盖1394您的应用程序的WinDbg的 “目标” 运行。 Windbg运行在“主机”上。
  • 在主机上运行visual studio
  • 让Visual Studio使用远程工具在目标上启动您的应用程序。
  • 打入内核模式的WinDbg制止目标
  • 等待足够长的Visual Studio的TCP连接超时在WinDbg中,以未停止的目标
  • “G”观察你的应用程序“流行”时远程监控实现了网络连接了
  • 重新启动您的应用程序:(

解决方案:

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

而且,我觉得更容易使用为内核模式和用户模式相同的调试器,WinDBG的是非常强大的,即使在用户模式,我可以利用我自己的WinDbg扩展 两个内核模式和用户模式实例。

2

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

1

我一直很喜欢手表和跟踪功能:'wt' - >它在输出窗口打印所有功能调用。这是非常酷的东西!

相关问题