沒有任何程序員可以一鼓作氣的寫出沒有任何 Bug 的代碼,因此不少程序員有至關一部分時間是花費在 Debug 上的,程序調試是每一個程序員必須面對的工做。如何使用 Eclipse 進行有效的、尤爲是高效地調試代碼是一個值得學習的技巧。java
2、Eclipse中和Debug相關的視圖express
3、Debugjson
3.1 設置斷點服務器
3.2 調試程序多線程
3.2.1 調試本地 Java 語言程序socket
3.3.2 遠程調試編輯器
1、Eclipse調試介紹函數
使用過Eclipse的人都知道,Eclipse都是自帶Java調試器的,能夠提供不少基本的調試功能。 Eclipse 平臺工做臺及其工具是圍繞 JDT 組件構建的,該組件爲 Eclipse 提供了下列特性:工具
項目管理工具 透視圖和視圖 構造器、編輯器、搜索和構建功能 調試器
圖 1. Eclipse Debug 透視圖的通常視圖(該視圖能夠在Eclipse界面的右上角位置點擊Debug按鈕進入)
Debug View:
Debug視圖容許您在工做臺上管理正在調試和運行的程序,他顯示了你正在調試的程序中掛起的線程的堆棧幀,程序中的每一個線程做爲樹的節點出現。他展現了正在運行的每一個目標的進程。若是線程被掛起,它的堆棧幀以子元素的形式展現。如下是一些經常使用的debug按鈕:
Skip All Breakpoints::將全部斷點設置爲被跳過的,設置了Skip All Breakpoints
以後,全部斷點上都會有一個斜線,表示斷點將被跳過,線程不會在該斷點處被掛起。
Drop to Frame:這個命令可讓程序回到當前方法的開頭第一行從新開始執行,能夠從新執行這個java堆棧幀,能夠選擇一個指定的堆棧幀,而後點擊 Drop to Frame
,這樣就能夠從新進入指定的堆棧幀。使用Drop to Frame時候須要注意:
1.不能drop到已經執行過的方法棧中的方法中。
2.drop到stack frame中時,不會改變全局數據原有的值,好比,一個包含元素的vertor並不會被清空。
Step Filters:這個功能比較簡單,就是當咱們在debug的時候想要忽略一些咱們不關注的類時,能夠開啓Step Filters
進行過濾,程序會一直執行直到遇到未通過濾的位置或斷點。Step Filters
功能由Use Step Filters
,Edit Step Filters
,Filter Type
,Filter Package
四項組成。具體操做以下:
步驟 1: Windows -> Preferences -> Java -> Debug -> Step Filtering.
步驟 2:選擇‘Use Step Filters’.
步驟 3:在屏幕上選中所需的選項。你能夠添加你本身代碼庫中的部分代碼。
步驟 4:點擊‘Apply’.
原理上,Edit Step Filter
命令用於配置Step Filter
規則,而Filter Type
與Filter Package
分別指的是過濾的Java類型與Java Package。
Step Return:跳出當前方法,在被調用方法的執行過程當中,使用Step Return
會在執行完當前方法的所有代碼後跳出該方法返回到調用該方法的方法中。
Step Over:在單步執行時,在函數內遇到子函數時不會進入子函數內單步執行,而是將子函數整個執行完在中止,也就是把子函數整個做爲一步。
Step Into:單步執行,遇到子函數就進入而且繼續單步執行
Resume:恢復暫停的線程,直接從當前位置跳到下一個斷點位置。
Suspend:暫停選定的線程,這個時候能夠進行瀏覽或者修改代碼,檢查數據等。
Eclipse經過Suspend與Resume來支持線程的暫掛與恢復。通常來說,Suspend適用於多線程程序的調試,當須要查看某一個線程的堆棧幀及變量值時,咱們能夠經過Suspend命令將該線程暫掛。Resume用於恢復。有兩種Resume須要注意:第一是當在調試過程當中修改程序代碼,而後保存,點擊Resume,此時程序會暫掛於斷點。第二是當程序拋出異常時,運行Resume,程序也會暫掛於斷點。
Terminate:Eclipse經過Terminate
命令終止對本地程序的調試。
Disconnect:Eclipse使用Disconnect
命令來終止與遠程JVM的socket鏈接。
Variables View
顯示與Debug View
中選定的堆棧幀相關的變量信息,調試Java
程序時,變量能夠選擇將更詳細的信息顯示在詳細信息窗格中。此外,Java
對象還能夠顯示出其包含的屬性的值。在該窗口中選中變量鼠標右鍵點擊能夠進行許多操做,主要操做有如下這些:
All Instances:打開一個對話框來顯示該java類的全部實例,使用該功能須要java虛擬機支持實例的檢索。
All References::打開一個對話框來顯示全部引用了該變量的java對象,
Change Value::更改變量的值,該功能能夠和Drop to Frame
聯合使用進行程序的調試。使用這兩個功能就能夠代替從新debug
Copy Variables:複製變量的值,尤爲在變量值很長(好比json數據)的時候,這個功能就派上用場了。
Find:有的時候一個類中變量特別多的時候,能夠進行查找。
Breakpoints View
將列出你在當前工做區間裏設置的全部斷點,雙擊斷點能夠進入到程序中該斷點的位置。還能夠啓用或禁用斷點,刪除,添加新的,根據工做組或點命中計數給他們分組。在使用斷點是有如下兩個技巧是十分有用的:
Hit Count: 是指定斷點處的代碼段運行多少次,最典型的就是循環,若是要讓一個循環執行10次就線程掛起,則指定Hit Count值爲10,那麼當前的循環執行到第九次的時候就會掛掉。
Conditional:顧名思義,就是條件判斷,例如咱們須要循環變量i==10時,線程掛起,則條件設定爲i==10,選擇Suspend when 「true」。
那若是上面的Hit Count和Conditional都選擇的話,若是表達式和值設置不合理則會失效。若是選擇Suspend when value changes,那麼可能在Conditional在變量值發生改變的時候就掛起。
要在 Debug 透視圖的編輯器中求表達式的值,選中設置有斷點的一整行,並在上下文菜單中選擇 Inspect 選項。表達式是在當前堆棧幀的上下文中求值的,其結果顯示在 Display 窗口的 Expressions 視圖中。 好比我想要計算變量a+b的值,那麼就能夠在表達式視圖中加一個表達式:a+b
可使用這個視圖,輸入或者演算一些新的代碼。這些代碼在當前的調試位置的上下文環境中被執行,這意味着,你可使用全部變量甚至是內容助手。要執行你的代碼的話,只需標記它,並使用右鍵菜單或者CTRL+U(執行)或者 CTRL+SHIFT+I (檢查).
在源代碼文件中,在想要設置斷點的代碼行的前面的標記行處,雙擊鼠標左鍵就能夠設置斷點,在相同位置再次雙擊便可取消斷點。有的時候咱們還有這樣的須要,就是我並不想一行一行的執行代碼,好比一個for循環會循環1000多遍,我只想在第500遍的時候讓線程掛起進行調試,這個時候咱們可使用條件斷點。 設置條件斷點:咱們能夠給該斷點設置觸發條件,一旦知足某條件是纔開始調試,能夠在斷點處點擊鼠標右鍵,選擇Breakpoint Properties
進入斷點設置頁面,剛剛在講斷點視圖的時候咱們學到過Hit Count
和Conditional
的用法,這裏能夠設置條件和執行次數。
在全部調試中,調試一個Java程序是最簡單的,主要有設置斷點、啓動調試、單步執行、結束調試幾步。
設置斷點:前面已經說過。
啓動調試:Eclipse提供四種方式來啓動程序(Launch)的調試,分別是經過菜單(Run –> Debug)、圖標(「綠色臭蟲」)、右鍵->Debug As以及快捷鍵(F11),在這一點上,與其餘命令(例如Run)相似。
單步執行:主要使用前面講過的幾個視圖進行調試,其中debug視圖中的幾個按鈕有快捷鍵:
Step Retuen(F7)
Step Over (F6)
Step Into (F5)
結束調試:經過Terminate
命令終止對本地程序的調試。
遠程調試主要用於調試非本地Java程序,這裏的非本地並非只在其餘人的機器上才叫非本地。運行在本機上的Web服務器上的程序在調試時也須要使用遠程調試。遠程調試的大體步驟和調試本地Java語言程序基本一直,只是在設置上有些不一樣。
Eclipse 調試器能夠調試遠程應用程序。它能夠鏈接到一個運行 Java
應用程序的遠程 VM
,將本身鏈接到該應用程序上去。使用遠程調試會話與使用本地調試會話大體相同。可是,遠程調試配置須要在 Run > Debug
窗口中配置一些不一樣的設置。須要在左側視圖中先選擇 Remote Java Application
選項,而後單擊 New
。這樣就建立了一個新的遠程啓動配置,會顯示出三個選項卡:Connect
、Source
和 Common
。
在 Connect 選項卡的 Project
字段,選擇在啓動搜索源代碼時要引用的項目。在 Connect 選項卡的 Host
字段,輸入運行 Java 程序的遠程主機的 IP 地址或域名。在 Connect 選項卡的 Port
字段,輸入遠程 VM 接收鏈接的端口。一般,該端口在啓動遠程 VM 時指定。若是想讓調試器決定在遠程會話中 Terminate
命令是否可用,能夠選擇 Allow termination of remote VM
選項。若是但願能夠終止鏈接的 VM,則選擇該選項。如今,在選擇 Debug
選項時,調試器會嘗試鏈接到指定地址或端口的遠程 VM,結果會在 Debug 視圖中顯示出來。