平常程序遇到錯誤,開發環境下一般都用調試搞定,生產環境下通過查看日志搞定。但也有搞不定的時候,這是我在Silverlight開發時遇到的的錯誤:
如果啟用調試,"對不起,程序已經崩潰,無法附加到進程"。怎麼辦?提示信息太少,盲目懷疑程序哪裡寫的不對,只會使問題變得更糟,拖延了解決問題的時間。
異常排查此時我們應該查看是哪一個請求引起的錯誤,方法就是使用浏覽器的開發者工具:IE8以上按f12,chrome按下ctrl+shift+I,轉到“網路”,開始捕捉:
這裡我們得到的是一個500錯誤,知道了是請求.svc時出錯了。雙擊查看響應正文或者直接復制請求url到浏覽器訪問可以得到更詳細的出錯信息:
我們看到調用堆棧還沒有開始調用我們的代碼,和我們自己的代碼沒有關系。此時去google(程序猿果斷放棄baidu吧),沒有找到任何解決問題的方法。我們只能根據自己程序的實際情況,判斷是DomainService出的問題。因為平時按部就班寫的程序根本不出現這種錯誤,但這次是引用的類庫中的DomainService,所以一定是漏掉了什麼dll導致的。最偷懶的解決方法:手動添加一個“域服務類”到工程,VS自動添加所需dll,並配置好了web.config。再次運行,問題解決了。
結論最怕遇到這種錯誤提示很少的的錯誤,因為莫名其妙,無從查起,讓人抓狂。有時一個錯誤一下午就浪費過去了,還不一定解決。方法還是具體問題具體分析,根據程序的實際情況,結合自己的成功經驗,多google,一定能解決的。當然如果自己解決了又google不到的最好發到cnblogs,作為前車之鑒服務大家,這也是寫技術博的猿最願意做的事吧。