Debug 的心聲 (2) - 錯誤訊息:「沒有可用來源」?用 IntelliTrace 找 Exception 來源 v2

Debug 的心聲 (2) - 錯誤訊息:「沒有可用來源」?用 IntelliTrace 找 Excpetion 來源

在開發的時候常常會以為 小小地改了一兩行程式碼   應該沒啥大礙嘛~~~ 

但往往總是會發生一些連自已都莫明奇妙的畫面 Orz

 

就像小弟自已認為,只不過在 DB 加了兩個欄位,並在 EDMX ( Entity Framework ) 中更新了模組就好

很簡單嘛~~~~  ( 吐煙 )

 

( F5 給它按下去 )

 

怎麼壞掉了~~~~  ( 囧rz )

 

而且還是跟之前看的還長得不一樣

這到底是什麼鬼呀~~~~

 

錯誤畫面如下:

image 
連個錯誤行號都沒有的美好畫面 Orz

XamlParseException ??該不會是 WPF 的 XAML 壞掉了吧?  ( 事後證明這個錯誤訊息一切都是假象)

還有那個行號3和行位置5 又是什麼鬼呀~~ 很囧

 

UI 相關的檔案壓根都還沒有 check out 啊~~~ 

 

當下還是不死心!應該要看一下,下面的「區域變數」和「檢視詳細資料」

image
令人開心的是,沒有一個讓我看得懂  錯誤是在講啥  ( 第二次打擊 )

 

 

這時想起來 應該用 IntelliTrace 這個全新的 Debug 工具

從右邊的 IntelliTrace 視窗中可以看到所有的「例外狀況」

就一個一個開啟 Event 項目查看所有的錯誤

太棒了!可以看到之前過程中發現了什麼事… 

 

image 

錯誤訊息

指定的結構描述無效。錯誤:
未載入關聯性 'PrintStoreDBModel.WorkerDetailBook_FK_BookTypeID',因為無法使用型別 'PrintStoreDBModel.BookType'。
下列資訊可能有助於解決先前的錯誤:
型別 'DTO.BookType' 上不存在必要的屬性 'TimeStamp'。

 

呼~~~~   太好了,有這樣子的錯誤訊息就可以很明確地知道,到底是怎麼樣的錯誤

 

image 
按下「切換至呼叫檢視」就可以看到,每一個錯誤是怎麼發生的  ( 就跟 Call Stack 一樣 )

 

 image
這時再看錯誤訊息… 總算是比較正常了!

很清楚是因為 EDMX 中的 模組中對應中是有問題的

 

image

直接在 TimeStamp 上按右鍵 –> 選賖刪除

image

重新再編譯後就可以正常執行了!!

 

從這裡可以看到,利用 IntelliTrace 連平常很難抓的 Exception Bug 都可以很簡單的找出來

到底是從那一個地方開始掛掉

不必再那麼辛苦地按 F11 ( 逐步偵錯 ) 了

 

可能有些會說可以搭配 Log 的方式

但,若是只有在最外層記錄的話,就不知道裡面是誰在做怪

而且太多 Log 只會拖跨效能而已,所以平常寫那麼多 log 也不會去開的

 

重點是所有相關資訊都會有記錄。 Ex.. 變數、Exception、事件、呼叫過程等等… 

 

Tip : 不是說 Log  不重要,它非常重要。尤其是上線後 Log 是讓您知道訊息的手段之一。

只是在除錯上翻 Log 是非常非常花時間的。

( 相信您不會在伺服器上安裝 VS 吧!)

 

在善用工具後可以發現,不單單縮短了 Debug 時間。連同 Exception 出現的順序 和 經過那些 method 而產生

也都會很清楚地用時間軸和順序來呈現有問題的程式碼

 

 

ps.. 這是在寫上一篇時遇到的小問題,前後花不到 2 分鐘的時間找到問題來源。

若是以前的我可能花 20 分鐘都還沒有找出來。 ( 含 搜尋時間 )

 

 

image 
有更詳細的設定可以決定要顯示那些 Exception

 

 

Update

若是沒有出現上面的項目的話!請到 VS2010-->工具-->選項—> IntelliTrace 的項目開啟

image