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