您好,登錄后才能下訂單哦!
.NET中怎么對異常進行快速定位?相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
一:定位本機異常
在我們本機定位異常很容易。假設(shè)我們都是使用的的VisualStudio,那么只需要在調(diào)試->異常菜單中將Common Langeuage Runtime Exception(CLR異常)勾選。如下圖:
在上面的圖片中可以發(fā)現(xiàn)有5種類型的異常,例如c++異常、win32異常等等。對于.NET程序來說我們只關(guān)注CLR異常。
接下來進行調(diào)試,當(dāng)自己的程序代碼中有異常的時候,VS就會自動定位到異常的位置。
我們可以看到異常的詳細(xì)信息,并且可在調(diào)用堆棧窗口中看到 程序的堆棧信息。在堆棧信息中我們可以看到在哪個類、哪個函數(shù)中出的錯,如下圖:
調(diào)試程序有兩種方式,一種是用VS直接啟動程序,另一種是附加到進程。
附加到進程的時候,程序類型不要選錯了,我使用的是.net4.0 所以程序類型選擇的是 托管(4.0版)代碼。
另外附加到進程有個快捷鍵是 Ctrl+Alt+P。
但是如果異常不是你的代碼中拋出的,那么如何定位呢?
可以打開 調(diào)試 菜單下面的 選項和設(shè)置,將 啟用"僅我的代碼" 這一項取消勾選。那么別人代碼中的異常就可以拋出了。
二:在客戶環(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,顯示附加的進程),回車,這時會列表所有可以附加的進程。
PID 表示進程標(biāo)識,
輸入a 11940 附件到 ConsoleApplication2.ex示例程序。
這時程序會中斷執(zhí)行,我們在這個時機可以做一些設(shè)置。讓程序在遇到異常時自動中斷。
輸入命令 ca (catch)查看當(dāng)前調(diào)試器遇到哪些事件會中斷。
可以看到 Exception對應(yīng)的是Igonre all exception ,也就是忽略所有異常,發(fā)生異常時不會中斷。
輸入命令 ca ex 這樣調(diào)試器遇到異常時就會中斷了。
再次輸入ca 命令會看到 Exception對應(yīng)的值已經(jīng)變?yōu)镾top on all exception了。這時遇到任何異常都會中斷了。
輸入命令 g 讓程序繼續(xù)執(zhí)行。
當(dāng)遇到異常時會自動中斷到調(diào)試器,如下圖:
入命令 w(where,程序運行到哪里了) 可以查看異常堆棧信息
三:在客戶環(huán)境定位SilverLight異常
如果客戶的silverlight應(yīng)用服務(wù)器部署在外網(wǎng),那么我們可以直接用瀏覽器訪問該silverlight站點,然后用VS附加到瀏覽器進程來調(diào)試。
調(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快捷鍵。
附件進程后 程序會中斷到調(diào)試器,這個時候我們需要做兩個設(shè)置。
一個是 設(shè)置程序發(fā)生異常時讓其中斷到調(diào)試器,設(shè)置方法是打開debug菜單下的Event Filter,將CLR異常設(shè)置其為enable。
另外需要加載調(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) 來查看異常信息。如下圖:
如果想查看堆棧信息的話可以輸入命令 !clrstack
看完上述內(nèi)容,你們掌握.NET中怎么對異常進行快速定位的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責(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)容。