溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

.NET中怎么對異常進行快速定位

發(fā)布時間:2020-12-09 16:47:51 來源:億速云 閱讀:156 作者:Leah 欄目:開發(fā)技術(shù)

.NET中怎么對異常進行快速定位?相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

一:定位本機異常

在我們本機定位異常很容易。假設(shè)我們都是使用的的VisualStudio,那么只需要在調(diào)試->異常菜單中將Common Langeuage Runtime Exception(CLR異常)勾選。如下圖:

.NET中怎么對異常進行快速定位

在上面的圖片中可以發(fā)現(xiàn)有5種類型的異常,例如c++異常、win32異常等等。對于.NET程序來說我們只關(guān)注CLR異常。

接下來進行調(diào)試,當(dāng)自己的程序代碼中有異常的時候,VS就會自動定位到異常的位置。

我們可以看到異常的詳細(xì)信息,并且可在調(diào)用堆棧窗口中看到 程序的堆棧信息。在堆棧信息中我們可以看到在哪個類、哪個函數(shù)中出的錯,如下圖:

 .NET中怎么對異常進行快速定位

調(diào)試程序有兩種方式,一種是用VS直接啟動程序,另一種是附加到進程。

 .NET中怎么對異常進行快速定位

附加到進程的時候,程序類型不要選錯了,我使用的是.net4.0 所以程序類型選擇的是 托管(4.0版)代碼。

另外附加到進程有個快捷鍵是 Ctrl+Alt+P。

但是如果異常不是你的代碼中拋出的,那么如何定位呢?

可以打開 調(diào)試 菜單下面的 選項和設(shè)置,將 啟用"僅我的代碼" 這一項取消勾選。那么別人代碼中的異常就可以拋出了。

 .NET中怎么對異常進行快速定位

二:在客戶環(huán)境定位.net程序異常:

我們的程序最后都會運行在客戶的環(huán)境中,客戶環(huán)境上不會有VS這樣的開發(fā)工具,那么怎么辦呢?

我們可以使用一個很小巧的命令行調(diào)試工具Mdbg.exe,這個工具是安裝VS的時候附帶安裝的,僅能調(diào)試.net托管代碼。

Mdbg.exe其實有很多功能,不過本文只講它定位異常的功能,后續(xù)文章會講使用Mdbg.exe單步調(diào)試的方法。

Mdbg.exe命令詳細(xì)介紹可以 輸入 h(help) 或者? 名來查看,也可以看下面的鏈接,

http://msdn.microsoft.com/zh-cn/ms229861(vs.80).aspx#

根據(jù)CLR版本的不用,Mdbg.exe也是有多個版本的。

C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\Mdbg.exe用于調(diào)試

CLR2.0(對應(yīng)net2.0,3.0,3.5)程序。

C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\Mdbg.exe用于調(diào)試CLR4.0程序(對用.net4.0)。

另外Mdbg.exe有一個依賴DLL 叫做MdbgCore.dll。我們可以直接將相應(yīng)版本的Mdbg.exe和MdbgCore.dll拷貝到客戶機器上使用。

沒有安裝VS的朋友可以拷貝我自己封裝的一個安裝包 http://xiazai.jb51.net/201506/other/U8DebugSetup.rar,這里面除了Mdbg.exe還有一些其他組件我們后面的文章會用到。

默認(rèn)會安裝在 C:\Program Files\U8Debug。

Mdbg.exe的使用方法很加簡,雙擊打開它,然后輸入 a(attach,顯示附加的進程),回車,這時會列表所有可以附加的進程。

 .NET中怎么對異常進行快速定位

PID 表示進程標(biāo)識,

輸入a 11940 附件到 ConsoleApplication2.ex示例程序。

這時程序會中斷執(zhí)行,我們在這個時機可以做一些設(shè)置。讓程序在遇到異常時自動中斷。

輸入命令 ca (catch)查看當(dāng)前調(diào)試器遇到哪些事件會中斷。

 .NET中怎么對異常進行快速定位

可以看到 Exception對應(yīng)的是Igonre all exception ,也就是忽略所有異常,發(fā)生異常時不會中斷。

輸入命令 ca ex 這樣調(diào)試器遇到異常時就會中斷了。

再次輸入ca 命令會看到 Exception對應(yīng)的值已經(jīng)變?yōu)镾top on all exception了。這時遇到任何異常都會中斷了。

 .NET中怎么對異常進行快速定位

輸入命令 g 讓程序繼續(xù)執(zhí)行。

當(dāng)遇到異常時會自動中斷到調(diào)試器,如下圖:

 .NET中怎么對異常進行快速定位

入命令 w(where,程序運行到哪里了) 可以查看異常堆棧信息

 .NET中怎么對異常進行快速定位

三:在客戶環(huán)境定位SilverLight異常

如果客戶的silverlight應(yīng)用服務(wù)器部署在外網(wǎng),那么我們可以直接用瀏覽器訪問該silverlight站點,然后用VS附加到瀏覽器進程來調(diào)試。

 .NET中怎么對異常進行快速定位

調(diào)試方法比調(diào)試普通.net程序一樣。

但是如果,客戶的Silverlight服務(wù)器是部署在內(nèi)網(wǎng),那么你只能在客戶機器上調(diào)試了。

并且Mdbg.exe也幫不了你了,它不能調(diào)試Silverlight程序。

我們還有另一個著名的調(diào)試工具Windbg。體積大概有不到20M,很容易安裝到客戶機,安裝包大家可以到網(wǎng)上自己下載。windbg分為32位和64位兩個版本,

調(diào)試32位的程序請使用32位windbg,反之則要使用64位的windbg,具體為什么我們不用深究,記住了就可以了。

相比Mdbg.exe的小巧實用,Windbg顯然強大的多,但是使用起來也復(fù)雜一些。

Windbg其實可以調(diào)試很多種類型的程序,例如普通.NET程序,c++等。但是本文只講解使用windbg定位異常的方法。

首先我們使用IE瀏覽器打開silverlight應(yīng)用程序,然后打開windbg附件到IE進程來調(diào)試。附加進程的方式可以通過File菜單下的Attach to a process或者使用F6快捷鍵。

 .NET中怎么對異常進行快速定位

附件進程后 程序會中斷到調(diào)試器,這個時候我們需要做兩個設(shè)置。

一個是 設(shè)置程序發(fā)生異常時讓其中斷到調(diào)試器,設(shè)置方法是打開debug菜單下的Event Filter,將CLR異常設(shè)置其為enable。

 .NET中怎么對異常進行快速定位

另外需要加載調(diào)試器擴展,使用過windbg的朋友都知道調(diào)試.net程序需要加載一個調(diào)試器擴展sos.dll。這個sos.dll也有一個Silverlight版本的。

位置在silverlight的安裝目錄 C:\Program Files (x86)\Microsoft Silverlight\5.1.10411.0\sos.dll。

我們再command窗口中輸入 .load C:\Program Files (x86)\Microsoft Silverlight\5.1.10411.0\sos.dll 來加載它。

之后輸入命令 g 來回復(fù)程序的執(zhí)行。當(dāng)發(fā)生異常時就會中斷到調(diào)試器中。

發(fā)生異常是我們可以使用!pe(print exception) 來查看異常信息。如下圖:

 .NET中怎么對異常進行快速定位

如果想查看堆棧信息的話可以輸入命令 !clrstack

.NET中怎么對異常進行快速定位

看完上述內(nèi)容,你們掌握.NET中怎么對異常進行快速定位的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

ne
AI