九個技巧:java
- 邏輯結構
- 條件debug
- 異常斷點
- 單步過濾
- 跳到幀
- Inspect
- expressions
- display
- 遠程debug
最先開始用eclipse的debug的時候,只會F5 F6 F7 F8,甚至F7都不是很搞的明白是怎麼用的,那時候資淺,碰不到須要複雜debug的代碼,慢慢工做深刻了,場景碰多了,就須要各類debug技巧來提高定位bug效率,之前找人幫忙排查問題,看他開各類窗口debug各類溜甚是羨慕嫉妒恨,慢慢久病成醫本身也用溜了eclipse的一些主要的debug技巧。稍做整理分享出來。web
F5678這四個基本技能就略過不說了,可是最基本的技能能解決90%問題,因此雖然略過不說 ,可是必須用的很溜,相信園友達人們這四個確定比我用的溜的多。express
1. 邏輯結構windows
邏輯結構主要用來展現map之類的collection數據結構存儲的值的,它只展現存儲值的邏輯部分,而屏蔽了數據結構詳細的內部結構,更方便咱們查看map之類collection結構裏存儲的值,推薦使用。服務器
這個按鈕就是展現邏輯結構的按鈕,下面兩個圖,上圖是不展現邏輯結構,下圖是展現邏輯結構,很明顯,下圖的結構可讀性更強,能夠專一於debug的變量。數據結構
2. 條件debug多線程
條件debug用在須要知足某種條件纔會觸發斷點的場景,好比只有id是12345這條記錄會有問題,那就當id等於12345時才觸發斷點,其餘都放過。app
右擊斷點選擇斷點屬性,就能看到這樣一個配置框,右邊的文本區塊能夠填寫條件代碼,好比id==12345,因爲每次都要作這個判斷,若是循環數很大的話,仍是有點點慢的,你能夠去上個廁所接個水啊什麼的,仍是很方便的。eclipse
3. 異常斷點
異常斷點只要用在debug某種異常的時候,能夠配置當這個異常出現後才觸發斷點,不須要debug去尋找異常。
點擊這個紅圈就能彈出異常斷點的窗口,會列出你係統裏的全部異常類,而後選擇須要斷點的異常就OK。
4. 單步過濾
單步過濾的場景是咱們在使用F5來跟到某個方法內部的時候,常常會跟到一些咱們肯定不須要看的方法內部。
this.getTradeDetail(uid, itemStr.subString(0,5))
好比這行代碼,想F5進入getTradeDetail內部,會首先執行itemStr.subString方法,會先進入subString方法,而這方法是jdk的String方法,肯定沒問題,不須要關心,單步過濾就是跳過這些咱們想忽略的方法直接到目標方法內部的一種debug技巧。
在Window > PreferencesJava > Debug > Step Filtering 設置過濾器, 能夠選擇須要過濾掉的包和類。同時要確保你在debug視圖中啓用了單步過濾,以下圖。這樣在使用單步調試的時候,就會使用到這個過濾功能。
上圖是過濾器配置,典型的就是把jdk的一些類和包配置過濾。下圖是要在debug時候開啓單步過濾,不然不生效。
5. 跳到幀
跳到幀是一種重入技巧,在debug時,eclipse能夠直接跳到調用棧中指定的任意楨,而且使JVM在此處從新運行。這使你能夠從新運行你的部分代碼,而不須要爲了調試以前的代碼而從新來一次。
要注意的是:已經被修改的變量不會被重置,它們會保留當時的值。
使用方式:選擇調用棧中的一楨,點擊按鈕「跳到楨」
6. Inspect
inspect用來查看某個表達式的之,對於變量值debug很容查看,可是對於一個表達式的值就不容易查看,仍是這句:
this.getTradeDetail(uid, itemStr.subString(0,5))
想看getTradeDetail的值,就無法想看變量值同樣(雖然這個頗有多是賦值給一個變量...),要看這種表達式值,就須要inspect,具體作法是選中這行表達式,而後右擊->inspect,或者更方便的快捷鍵組合:ctrl+shift+i,會彈出以下的展現表達式結果的框:
7. expressions
expressions窗口也是用來看變量或者表達式的值的,在windows->show viewz中打開expression窗口,而後在裏面添加你想觀察的表達式,好比仍是這句:
this.getTradeDetail(uid, itemStr.subString(0,5))
而後debug的時候,就能看到被添加的表達式結果了,另外也能根據須要改value的值。
8. display
display也是用來觀察和修改變量or表達式的,這個應該用的人比較多,在windows->show viewz中打開display窗口,能夠在display窗口裏寫表達式,而後右擊選擇display運行查看結果或者ctrl+shift+D快捷鍵組合,表達式能夠是程序中一行代碼或者你本身寫的一個賦值語句來改變變量值之類的。
9. 遠程debug
遠程debug能夠用來調試遠程服務器上的代碼,保證你本地代碼和遠程部署的代碼是一致,就能夠經過這種方式debug服務器代碼,這個是java web開發的一大利器,不然定位服務器問題簡直是災難。
遠程debug須要服務器端啓動jvm的時候作一些開啓和端口的配置,具體的配置網上不少,搜一下便可。而後在本地的debug configuration中雙擊添加一個remote java application,填寫遠程主機的host和配置的debug端口,就能夠開始debug了,以下圖:
我平時用到的主要就是這些了,若是有其餘的feature,歡迎園友達人們補充。
eclipse debug (調試) 學習心得
進入debug模式:
一、設置斷點
二、啓動servers端的debug模式
三、運行程序,在後臺遇到斷點時,進入debug調試狀態
=============================
做用域 功能 快捷鍵
全局 單步返回 F7
全局 單步跳過 F6
全局 單步跳入 F5
全局 單步跳入選擇 Ctrl+F5
全局 調試上次啓動 F11
全局 繼續 F8
全局 使用過濾器單步執行 Shift+F5
全局 添加/去除斷點 Ctrl+Shift+B
全局 顯示 Ctrl+D
全局 運行上次啓動 Ctrl+F11
全局 運行至行 Ctrl+R
全局 執行 Ctrl+U
=============================
1.Step Into (also F5) 跳入
2.Step Over (also F6) 跳過
3.Step Return (also F7) 執行完當前method,而後return跳出此method
4.step Filter 逐步過濾 一直執行直到遇到未通過濾的位置或斷點(設置Filter:window-preferences-java-Debug-step Filtering)
5.resume 從新開始執行debug,一直運行直到遇到breakpoint。
例如 :A和B兩個斷點,debug過程當中發現A斷點已經無用,去除A斷點,運行resume就會跳過A直接到達B斷點。
6.hit count 設置執行次數 適合程序中的for循環(設置 breakpoint view-右鍵hit count)
7.inspect 檢查 運算。執行一個表達式顯示執行值
8.watch 實時地監視對象、方法或變量的變化
9.咱們常說的斷點(breakpoints)是指line breakpoints,除了line breakpoints,還有其餘的斷點類型:field(watchpoint)breakpoint,method breakpoint ,exception breakpoint.
10.field breakpoint 也叫watchpoint(監視點) 當成員變量被讀取或修改時暫掛
11.添加method breakpoint 進入/離開此方法時暫掛(Run-method breakpoint)
12.添加Exception breakpoint 捕抓到Execption時暫掛(待續...)
斷點屬性:
1.hit count 執行多少次數後暫掛 用於循環
2.enable condition 遇到符合你輸入條件(爲ture\改變時)就暫掛
3.suspend thread 多線程時暫掛此線程
4.suspend VM 暫掛虛擬機
13.variables 視圖裏的變量能夠改變變量值,在variables 視圖選擇變量點擊右鍵--change value.一次來進行快速調試。
14.debug 過程當中修改了某些code後--〉save&build-->resume-->從新暫掛於斷點
15.resume 當debug調試跑出異常時,運行resume,從新從斷點開始調試16.若是一行有不少方法,當第一次按F5鍵就跳入這一行第一個方法,F6一步一步調試,F7跳出這方法.當第二次按F5鍵就跳入這一行第二個方法,F6一步一步調試,F7跳出這方法.以此類推.想進入這一行第幾個方法,就按幾回F5和F7.