Debug 的心聲 (2) - 錯誤訊息:「沒有可用來源」?用 IntelliTrace 找 Excpetion 來源
在開發的時候常常會以為 小小地改了一兩行程式碼 應該沒啥大礙嘛~~~
但往往總是會發生一些連自已都莫明奇妙的畫面 Orz
就像小弟自已認為,只不過在 DB 加了兩個欄位,並在 EDMX ( Entity Framework ) 中更新了模組就好
很簡單嘛~~~~ ( 吐煙 )
( F5 給它按下去 )
怎麼壞掉了~~~~ ( 囧rz )
而且還是跟之前看的還長得不一樣
這到底是什麼鬼呀~~~~
錯誤畫面如下:
XamlParseException ??該不會是 WPF 的 XAML 壞掉了吧? ( 事後證明這個錯誤訊息一切都是假象)
還有那個行號3和行位置5 又是什麼鬼呀~~ 很囧
UI 相關的檔案壓根都還沒有 check out 啊~~~
當下還是不死心!應該要看一下,下面的「區域變數」和「檢視詳細資料」
令人開心的是,沒有一個讓我看得懂 錯誤是在講啥 ( 第二次打擊 )
這時想起來 應該用 IntelliTrace 這個全新的 Debug 工具
從右邊的 IntelliTrace 視窗中可以看到所有的「例外狀況」
就一個一個開啟 Event 項目查看所有的錯誤
太棒了!可以看到之前過程中發現了什麼事…
錯誤訊息
指定的結構描述無效。錯誤:
未載入關聯性 'PrintStoreDBModel.WorkerDetailBook_FK_BookTypeID',因為無法使用型別 'PrintStoreDBModel.BookType'。
下列資訊可能有助於解決先前的錯誤:
型別 'DTO.BookType' 上不存在必要的屬性 'TimeStamp'。
呼~~~~ 太好了,有這樣子的錯誤訊息就可以很明確地知道,到底是怎麼樣的錯誤
按下「切換至呼叫檢視」就可以看到,每一個錯誤是怎麼發生的 ( 就跟 Call Stack 一樣 )
很清楚是因為 EDMX 中的 模組中對應中是有問題的
直接在 TimeStamp 上按右鍵 –> 選賖刪除
重新再編譯後就可以正常執行了!!
從這裡可以看到,利用 IntelliTrace 連平常很難抓的 Exception Bug 都可以很簡單的找出來
到底是從那一個地方開始掛掉
不必再那麼辛苦地按 F11 ( 逐步偵錯 ) 了
可能有些會說可以搭配 Log 的方式
但,若是只有在最外層記錄的話,就不知道裡面是誰在做怪
而且太多 Log 只會拖跨效能而已,所以平常寫那麼多 log 也不會去開的
重點是所有相關資訊都會有記錄。 Ex.. 變數、Exception、事件、呼叫過程等等…
Tip : 不是說 Log 不重要,它非常重要。尤其是上線後 Log 是讓您知道訊息的手段之一。
只是在除錯上翻 Log 是非常非常花時間的。
( 相信您不會在伺服器上安裝 VS 吧!)
在善用工具後可以發現,不單單縮短了 Debug 時間。連同 Exception 出現的順序 和 經過那些 method 而產生
也都會很清楚地用時間軸和順序來呈現有問題的程式碼
ps.. 這是在寫上一篇時遇到的小問題,前後花不到 2 分鐘的時間找到問題來源。
若是以前的我可能花 20 分鐘都還沒有找出來。 ( 含 搜尋時間 )
有更詳細的設定可以決定要顯示那些 Exception
Update
若是沒有出現上面的項目的話!請到 VS2010-->工具-->選項—> IntelliTrace 的項目開啟