最早開始用eclipse的debug的時候,只會F5 F6 F7 F8,甚至F7都不是很搞的明白是怎麼用的,那時候資淺,碰不到需要複雜debug的代碼,慢慢工作深入了,情境碰多了,就需要各種debug技巧來提升定位bug效率,以前找人幫忙排查問題,看他開各種視窗debug各種溜甚是羨慕嫉妒恨,慢慢久病成醫自己也用溜了eclipse的一些主要的debug技巧。稍作整理分享出來。
F5678這四個基本技能就略過不說了,但是最基本的技能能解決90%問題,所以雖然略過不說 ,但是必須用的很溜,相信園友達人們這四個肯定比我用的溜的多。 邏輯結構
邏輯結構主要用來展示map之類的collection資料結構儲存的值的,它只展示儲存值的邏輯部分,而屏蔽了資料結構詳細的內部結構,更方便我們查看map之類collection結構裡儲存的值,推薦使用。
這個按鈕就是展示邏輯結構的按鈕,下面兩個圖,上圖是不展示邏輯結構,下圖是展示邏輯結構,很明顯,下圖的結構可讀性更強,可以專註於debug的變數。
條件debug
條件debug用在需要滿足某種條件才會觸發斷點的情境,比如只有id是12345這條記錄會有問題,那就當id等於12345時才觸發斷點,其他都放過。
右擊斷點選擇斷點屬性,就能看到這樣一個配置框,右邊的文本區塊可以填寫條件代碼,比如id==12345,由於每次都要做這個判斷,如果迴圈數很大的話,還是有點點慢的,你可以去上個廁所接個水啊什麼的,還是很方便的。
異常斷點
異常斷點只要用在debug某種異常的時候,可以配置當這個異常出現後才觸發斷點,不需要debug去尋找異常。
點擊這個紅圈就能彈出異常斷點的視窗,會列出你系統裡的所有異常類,然後選擇需要斷點的異常就OK。
單步過濾
單步過濾的情境是我們在使用F5來跟到某個方法內部的時候,經常會跟到一些我們確定不需要看的方法內部。
this.getTradeDetail(uid, itemStr.subString(0,5))
比如這行代碼,想F5進入getTradeDetail內部,會首先執行itemStr.subString方法,會先進入subString方法,而這方法是jdk的String方法,確定沒問題,不需要關心,單步過濾就是跳過這些我們想忽略的方法直接到目標方法內部的一種debug技巧。
在Window > PreferencesJava > Debug > Step Filtering 設定過濾器, 可以選擇需要過濾掉的包和類。同時要確保你在debug視圖中啟用了單步過濾,如下圖。這樣在使用單步調試的時候,就會使用到這個過濾功能。
上圖是過濾器配置,典型的就是把jdk的一些類和包配置過濾。下圖是要在debug時候開啟單步過濾,否則不生效。
跳到幀
跳到幀是一種重入技巧,在debug時,eclipse可以直接跳到調用棧中指定的任意楨,並且使JVM在此處重新運行。這使你可以重新運行你的部分代碼,而不需要為了調試之前的代碼而重新來一次。
要注意的是:已經被修改的變數不會被重設,它們會保留當時的值。
使用方式:選擇調用棧中的一楨,點擊按鈕“跳到楨”
Inspect
inspect用來查看某個運算式的值,對於變數值debug很容查看,但是對於一個運算式的值就不容易查看,還是這句:
this.getTradeDetail(uid, itemStr.subString(0,5))
想看getTradeDetail的值,就沒法想看變數值一樣(雖然這個很有可能是賦值給一個變數…),要看這種運算式值,就需要inspect,具體做法是選中這行運算式,然後右擊->inspect,或者更方便的快速鍵組合:ctrl+shift+i,會彈出如下的展示運算式結果的框:
這裡寫圖片描述
- expressions
expressions視窗也是用來看變數或者運算式的值的,在windows->show viewz中開啟expression視窗,然後在裡面添加你想觀察的運算式,比如還是這句:
this.getTradeDetail(uid, itemStr.subString(0,5))
然後debug的時候,就能看到被添加的運算式結果了,另外也能根據需要改value的值。 display
display也是用來觀察和修改變數or運算式的,這個應該用的人比較多,在windows->show viewz中開啟display視窗,可以在display視窗裡寫運算式,然後右擊選擇display運行查看結果或者ctrl+shift+D快速鍵組合,運算式可以是程式中一行代碼或者你自己寫的一個指派陳述式來改變變數值之類的。
遠程debug
遠程debug可以用來調試遠程伺服器上的代碼,保證你本地代碼和遠程部署的代碼是一致,就可以通過這種方式debug伺服器代碼,這個是java web開發的一大利器,否則定位服務器問題簡直是災難。
遠程debug需要伺服器端啟動jvm的時候做一些開啟和連接埠的配置,具體的配置網上很多,搜一下即可。然後在本地的debug configuration中雙擊添加一個remote java application,填寫遠程主機的host和配置的debug連接埠,就可以開始debug了,如下圖:
我平時用到的主要就是這些了,如果有其他的feature,歡迎園友達人們補充。