2010-03-05 85 views
3

我支持相當廣泛部署的.NET 2.0 Winforms應用程序。在極少數情況下,我們會得到客戶的支持電話,當您嘗試啓動應用程序時,應用程序會返回.NET運行時異常AS SOON。使用Windows調試工具調試.NET 2.0 Winforms應用程序

在過去,我們已經幫助客戶重新安裝.net框架,並且經常運行......但偶爾不會。

在這種情況下,可以使用Windows Debugging Tools來確定問題的原因。如果是這樣,你必須下載調試符號到目標計算機(想避免因爲可以下載到目標的幾百MB的東西)。

這是.net應用程序的矯枉過正?任何替代品。你將如何去調試這個。非特定的步驟,將不勝感激。當然,這個應用程序被編譯爲目標機器上的RELEASE配置。客戶很可能沒有安裝開發工具或調試工具。我們通常可以通過遙控器訪問電腦。重新迭代。這種情況很快就會發生當客戶嘗試運行應用程序並立即失敗時。

解決客戶問題的最快途徑是什麼?

以下是來自事件日誌的最近錯誤的示例。
EventType clr20r3。 .exe P2 2010.1.0.0,p3 4B857AFD P4 BLAH BLAH system.invalidoperation,P10 NIL。

來源:.NET運行時2.0錯誤。 EventID:5000

在此先感謝。

Seth

回答

6

爲什麼不使用它?

對於客戶的機器,您將無法進行遠程調試。因此,建議捕獲故障轉儲以便崩潰並掛起故障轉儲,而WinDbg或ADPlus.exe在此處非常有用。

向最終用戶推出的WinDbg的應用程序,並執行

.dump /f path 

保存崩潰轉儲,那麼你可以要求轉儲文件和分析崩潰。

在目標機器上,不需要符號。當您在自己的機器上分析崩潰轉儲時,符號很有用,而這正是SOS等有用的地方。

當然還有其他方式獲得崩潰轉儲,

http://blogs.msdn.com/lexli/archive/2009/08/23/when-the-application-program-crashes-on-windows.aspx

+0

+1。調試工具是一個簡單的小型安裝,您可以將它們寫入批處理文件以在崩潰模式下運行adplus。我們將此用於有客戶問題,我們無法在內部複製 – 2010-03-06 10:31:09

+1

Adplus.vbs已過時。請在相同的文件夾中切換到ADPlus.exe。 – 2010-03-06 12:12:41

+0

Lex 感謝您的回答。這正是我所希望的那種答案。 你說:「讓你的最終用戶在WinDbg中啓動你的應用程序,並執行.dump/f路徑」 這是明顯的如何做到這一點?它有多簡單?你能簡單介紹一下嗎?我認爲「路徑」是轉儲文件的路徑。無論如何,完美的答案。現在來看看。 Seth – 2010-03-07 22:46:07

0

我不認爲你想要「Windows調試工具」。調試符號適用於操作系統,而不是.NET Framework。 (提醒,您的Windows.Forms應用程序位於.NET Framework中,而不是OS中。)

「遠程調試」幫助http://msdn.microsoft.com/en-us/library/y7f5zaaa.aspx

我通常會包含一個「StopSwitch」,但這不是啓用JIT的必要條件。 (請參閱「StopSwitch停止執行以進行實時調試」,網址爲http://missico.spaces.live.com/blog/cns!7178D2C79BA0A7E3!309.entry)這允許我啓用交換機,然後在運行的應用程序遇到調試器停止語句時連接到該應用程序。

您可以調試「發佈」版本。發佈pdb對堆棧跟蹤很有幫助。

我以前有過這個問題。我啓用了StopSwitch,檢查是第一行,但JIT並未啓動,因爲問題發生在.NET Framework甚至加載了我的應用程序之前。

+0

WinDbg中實際上可以完全用於調試.NET應用程序。尤其是隨着sos擴展。有關在崩潰模式下使用adplus.vbs,請參閱http://msdn.microsoft.com/en-us/library/bb190764.aspx – 2010-03-09 20:19:43

2

編輯:剛纔看到「在啓動時立即發生」。 Indeed WinDBG can help

儘管用於Windows的調試工具確實主要針對本機應用程序,但它們對於託管應用程序也很有用。不僅託管應用程序在執行時最終爲「本機」,而且對於WinDBG或CDB(如果您更喜歡命令行),也有特別的SOS extension

特別是(小)崩潰應用程序的轉儲可以用SOS擴展很好地分析。如果在釋放或調試模式下編譯應用程序並不重要,只要分析轉儲時手頭上有匹配的符號文件(.PDB)即可。

這裏有很多信息可供討論,但最好的辦法是搜索「windbg sos」。

關於例如你給

事件類型clr20r3。 .exe P2 2010.1.0.0, p3 4B857AFD P4 BLAH BLAH system.invalidoperation,P10 NIL。

它可能是別的東西,但對我來說,它看起來像在.NET應用程序中的未捕獲異常 - 在這種情況下是System.InvalidOperationException。

如果你可以得到墜毀應用程序的小型轉儲(查看ADPlus工具,這是調試工具的一部分,以便按需獲取轉儲或在事件中),那麼你可以將它加載到WinDBG中,使用SOS擴展(命令!clrstack,!dumpstack,!threads等)來確定未捕獲的異常來自何處。