第一層:遇到異常首先必須告訴本身,冷靜,不要慌。(一看到Bug就心慌,那麼武功就施展不了了)java
第二層:遇到Bug,第一潛意識看輸出異常的信息的(控制檯輸出,Junit輸出,頁面輸出),優先將異常輸出在控制檯。web
建議:遇到JUnit異常輸出,最好轉成控制檯輸出。(對測試方法的代碼try catch )
如:一下異常若是在Junit查看,很差發現爲,只知道是數據庫出錯了。轉成爲控制檯異常馬上就看到是缺乏了一個字段。數據庫
控制檯的異常更加直觀瀏覽器
第三層:查看異常的第一個關注點:異常的名字,經過異常名字大概能夠給異常分類。
如:根據這個異常的名字就知道,異常出如今數據庫操做。分佈式
第四層:查看異常的第二個關注點:異常的信息,不少異常的信息已經說明了異常的問題(30%)測試
如:該異常,明眼的同窗馬上就知道數據庫操做不成功,問題出在配置少了一個字段。網站
第五層:以上操做不能解決,查看異常的第三個關注點:在異常中尋找是否有本身寫的類,定位異常出錯的位置。
以下圖:明顯告訴爲,是DataSourceTest.java:23,就是該類的23行出錯了。能夠點進去3d
--點擊進去,設置斷點調試
第六層:在該出錯的位置System.out.print()輸出數據,分析數據(可選,若是會斷點跳過該步)xml
第七層:在該出錯的位置,設置調試斷點,根據單步調試,分析斷點輸出的數據。使用watch操做得到重點關注的數據。(80%)
注意:該步驟,包括在瀏覽器調試js代碼的流程。
重點:
(1)找的異常的代碼位置(經過在異常信息裏面找到本身的報錯位置!!)
(2)理解異常和數據的關係(難點)
第八層:有些問題,出錯是沒法設置斷點的,啓動程序就出錯了。並且這種問題,常常這種異常就沒有本身寫的類,斷點調試的功力就被廢了。遇到這種問題,第一意識要想到,這些問題不是Java代碼的出錯,出現這種問題的緣由:開發環境出錯,JSP頁面出錯,配置文件、配置類出錯
(1)如何判斷是開發環境出錯:看看項目有沒有錯誤警告。
(2)如何判斷是不是頁面出錯:查看頁面異常信息和控制檯
一般頁面出錯,異常會告訴你,哪一個頁面出錯。這是很重要的信息。
接着的問題只能根據信息提示解決了
(3)如何判斷是配置文件出錯:查看控制檯信息,有時控制檯找不到想要的。能夠經過設置入口斷點的方式。
如:在配置struts.xml配置是否出錯,在Action的方法入口處設置一個斷點。若是都沒有執行代碼邏輯就出錯了,那麼能夠判斷,就是web.xml得到strust.xml配置錯了,不多是代碼出錯。
注意:
分析配置文件異常時:
若是網站連啓動都啓動不了的,重點關注web.xml
若是網站能夠啓動的關注非web.xml的配置文件 (90%)
第九層:隔離法(99%)
在做爲以上全部操做,都沒法找到異常的緣由,可使用隔離法。能夠分爲代碼隔離和業務隔離。
(1)代碼隔離法
同一個程序中,根據異常的範圍,中止與異常無關的代碼模塊的執行,而且在代碼執行的流程的各處設置輔助斷點跟蹤。
作demo。對原理不太熟悉的代碼。!!!!
(2)業務隔離法
分佈式開發中,一個系統有多個子系統組成。每每一個業務的實現要調用N個子系統的接口。常常會出現,開發時功能是好的。上線時就出錯問題。遇到這種問題,在前八層的功力都沒法分析時,那麼就要將各個業務系統隔離分析了。
代碼隔離常常用於
(1)沒有輸出有效異常信息的異常。
(2)出現的異常不是固定的,有時能夠有時不能夠。
第十層:根據多年積累的經驗。使用直覺,能夠馬上定位絕大大部分問題,不須要任何招數。在直接判斷不了再使用以上的方法拆招。