2008-09-19 92 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' - >它在輸出窗口打印所有功能調用。這是非常酷的東西!