Eclipse调试方法
http://blog.jobbole.com/93421/
一、Eclipse調(diào)試介紹
二、Eclipse中和Debug相關(guān)的視圖
- 2.1 Debug View
- 2.2 Variables View
- 2.3 Breakpoints View
- 2.4 Expressions View
- 2.5 Display View
三、Debug
3.1 設(shè)置斷點(diǎn)
3.2 調(diào)試程序
3.2.1 調(diào)試本地 Java 語(yǔ)言程序
3.3.2 遠(yuǎn)程調(diào)試
一、Eclipse調(diào)試介紹使用過(guò)Eclipse的人都知道,Eclipse都是自帶Java調(diào)試器的,可以提供很多基本的調(diào)試功能。 Eclipse 平臺(tái)工作臺(tái)及其工具是圍繞 JDT 組件構(gòu)建的,該組件為 Eclipse 提供了下列特性:
項(xiàng)目管理工具 透視圖和視圖 構(gòu)造器、編輯器、搜索和構(gòu)建功能 調(diào)試器
二、Eclipse中和Debug相關(guān)的視圖
圖 1. Eclipse Debug 透視圖的一般視圖(該視圖可以在Eclipse界面的右上角位置點(diǎn)擊Debug按鈕進(jìn)入)
Debug View:
Debug視圖允許您在工作臺(tái)上管理正在調(diào)試和運(yùn)行的程序,他顯示了你正在調(diào)試的程序中掛起的線程的堆棧幀,程序中的每個(gè)線程作為樹(shù)的節(jié)點(diǎn)出現(xiàn)。他展示了正在運(yùn)行的每個(gè)目標(biāo)的進(jìn)程。如果線程被掛起,它的堆棧幀以子元素的形式展示。以下是一些常用的debug按鈕:
Skip All Breakpoints::將所有斷點(diǎn)設(shè)置為被跳過(guò)的,設(shè)置了Skip All Breakpoints之后,所有斷點(diǎn)上都會(huì)有一個(gè)斜線,表示斷點(diǎn)將被跳過(guò),線程不會(huì)在該斷點(diǎn)處被掛起。
Drop to Frame:這個(gè)命令可以讓程序回到當(dāng)前方法的開(kāi)頭第一行重新開(kāi)始執(zhí)行,可以重新執(zhí)行這個(gè)java堆棧幀,可以選擇一個(gè)指定的堆棧幀,然后點(diǎn)擊?Drop to Frame,這樣就可以重新進(jìn)入指定的堆棧幀。使用Drop to Frame時(shí)候需要注意:
1.不能drop到已經(jīng)執(zhí)行過(guò)的方法棧中的方法中。
2.drop到stack frame中時(shí),不會(huì)改變?nèi)謹(jǐn)?shù)據(jù)原有的值,比如,一個(gè)包含元素的vertor并不會(huì)被清空。
Step Filters:這個(gè)功能比較簡(jiǎn)單,就是當(dāng)我們?cè)赿ebug的時(shí)候想要忽略一些我們不關(guān)注的類時(shí),可以開(kāi)啟Step Filters進(jìn)行過(guò)濾,程序會(huì)一直執(zhí)行直到遇到未經(jīng)過(guò)濾的位置或斷點(diǎn)。Step Filters功能由Use Step Filters,Edit Step Filters,Filter Type,Filter Package四項(xiàng)組成。具體操作如下:
步驟 1: Windows -> Preferences -> Java -> Debug -> Step Filtering.
步驟 2:選擇‘Use Step Filters’.
步驟 3:在屏幕上選中所需的選項(xiàng)。你可以添加你自己代碼庫(kù)中的部分代碼。
步驟 4:點(diǎn)擊‘Apply’.
原理上,Edit Step Filter命令用于配置Step Filter規(guī)則,而Filter Type與Filter Package分別指的是過(guò)濾的Java類型與Java Package。
Step Return:跳出當(dāng)前方法,在被調(diào)用方法的執(zhí)行過(guò)程中,使用Step Return會(huì)在執(zhí)行完當(dāng)前方法的全部代碼后跳出該方法返回到調(diào)用該方法的方法中。
Step Over:在單步執(zhí)行時(shí),在函數(shù)內(nèi)遇到子函數(shù)時(shí)不會(huì)進(jìn)入子函數(shù)內(nèi)單步執(zhí)行,而是將子函數(shù)整個(gè)執(zhí)行完在停止,也就是把子函數(shù)整個(gè)作為一步。
Step Into:單步執(zhí)行,遇到子函數(shù)就進(jìn)入并且繼續(xù)單步執(zhí)行
Resume:恢復(fù)暫停的線程,直接從當(dāng)前位置跳到下一個(gè)斷點(diǎn)位置。
Suspend:暫停選定的線程,這個(gè)時(shí)候可以進(jìn)行瀏覽或者修改代碼,檢查數(shù)據(jù)等。
Eclipse通過(guò)Suspend與Resume來(lái)支持線程的暫掛與恢復(fù)。一般來(lái)講,Suspend適用于多線程程序的調(diào)試,當(dāng)需要查看某一個(gè)線程的堆棧幀及變量值時(shí),我們可以通過(guò)Suspend命令將該線程暫掛。Resume用于恢復(fù)。有兩種Resume需要注意:第一是當(dāng)在調(diào)試過(guò)程中修改程序代碼,然后保存,點(diǎn)擊Resume,此時(shí)程序會(huì)暫掛于斷點(diǎn)。第二是當(dāng)程序拋出異常時(shí),運(yùn)行Resume,程序也會(huì)暫掛于斷點(diǎn)。
Terminate:Eclipse通過(guò)Terminate命令終止對(duì)本地程序的調(diào)試。
Disconnect:Eclipse使用Disconnect命令來(lái)終止與遠(yuǎn)程JVM的socket連接。
Variables View :
Variables View顯示與Debug View中選定的堆棧幀相關(guān)的變量信息,調(diào)試Java程序時(shí),變量可以選擇將更詳細(xì)的信息顯示在詳細(xì)信息窗格中。此外,Java對(duì)象還可以顯示出其包含的屬性的值。在該窗口中選中變量鼠標(biāo)右鍵點(diǎn)擊可以進(jìn)行許多操作,主要操作有以下這些:
All Instances:打開(kāi)一個(gè)對(duì)話框來(lái)顯示該java類的所有實(shí)例,使用該功能需要java虛擬機(jī)支持實(shí)例的檢索。
All References::打開(kāi)一個(gè)對(duì)話框來(lái)顯示所有引用了該變量的java對(duì)象,
Change Value::更改變量的值,該功能可以和Drop to Frame聯(lián)合使用進(jìn)行程序的調(diào)試。使用這兩個(gè)功能就可以代替重新debug
Copy Variables:復(fù)制變量的值,尤其在變量值很長(zhǎng)(比如json數(shù)據(jù))的時(shí)候,這個(gè)功能就派上用場(chǎng)了。
Find:有的時(shí)候一個(gè)類中變量特別多的時(shí)候,可以進(jìn)行查找。
Breakpoints View :
Breakpoints View將列出你在當(dāng)前工作區(qū)間里設(shè)置的所有斷點(diǎn),雙擊斷點(diǎn)可以進(jìn)入到程序中該斷點(diǎn)的位置。還可以啟用或禁用斷點(diǎn),刪除,添加新的,根據(jù)工作組或點(diǎn)命中計(jì)數(shù)給他們分組。在使用斷點(diǎn)是有以下兩個(gè)技巧是十分有用的:
Hit Count:?是指定斷點(diǎn)處的代碼段運(yùn)行多少次,最典型的就是循環(huán),如果要讓一個(gè)循環(huán)執(zhí)行10次就線程掛起,則指定Hit Count值為10,那么當(dāng)前的循環(huán)執(zhí)行到第九次的時(shí)候就會(huì)掛掉。
Conditional:顧名思義,就是條件判斷,例如我們需要循環(huán)變量i==10時(shí),線程掛起,則條件設(shè)定為i==10,選擇Suspend when “true”。
那如果上面的Hit Count和Conditional都選擇的話,如果表達(dá)式和值設(shè)置不合理則會(huì)失效。如果選擇Suspend when value changes,那么可能在Conditional在變量值發(fā)生改變的時(shí)候就掛起。
Expressions View :
要在 Debug 透視圖的編輯器中求表達(dá)式的值,選中設(shè)置有斷點(diǎn)的一整行,并在上下文菜單中選擇 Inspect 選項(xiàng)。表達(dá)式是在當(dāng)前堆棧幀的上下文中求值的,其結(jié)果顯示在 Display 窗口的 Expressions 視圖中。 比如我想要計(jì)算變量a+b的值,那么就可以在表達(dá)式視圖中加一個(gè)表達(dá)式:a+b
Display View :
可以使用這個(gè)視圖,輸入或者演算一些新的代碼。這些代碼在當(dāng)前的調(diào)試位置的上下文環(huán)境中被執(zhí)行,這意味著,你可以使用所有變量甚至是內(nèi)容助手。要執(zhí)行你的代碼的話,只需標(biāo)記它,并使用右鍵菜單或者CTRL+U(執(zhí)行)或者 CTRL+SHIFT+I (檢查).
三、Debug
設(shè)置斷點(diǎn)
在源代碼文件中,在想要設(shè)置斷點(diǎn)的代碼行的前面的標(biāo)記行處,雙擊鼠標(biāo)左鍵就可以設(shè)置斷點(diǎn),在相同位置再次雙擊即可取消斷點(diǎn)。有的時(shí)候我們還有這樣的需要,就是我并不想一行一行的執(zhí)行代碼,比如一個(gè)for循環(huán)會(huì)循環(huán)1000多遍,我只想在第500遍的時(shí)候讓線程掛起進(jìn)行調(diào)試,這個(gè)時(shí)候我們可以使用條件斷點(diǎn)。?設(shè)置條件斷點(diǎn):我們可以給該斷點(diǎn)設(shè)置觸發(fā)條件,一旦滿足某條件是才開(kāi)始調(diào)試,可以在斷點(diǎn)處點(diǎn)擊鼠標(biāo)右鍵,選擇Breakpoint Properties進(jìn)入斷點(diǎn)設(shè)置頁(yè)面,剛剛在講斷點(diǎn)視圖的時(shí)候我們學(xué)到過(guò)Hit Count和Conditional的用法,這里可以設(shè)置條件和執(zhí)行次數(shù)。
調(diào)試程序
1、調(diào)試本地 Java 語(yǔ)言程序
在所有調(diào)試中,調(diào)試一個(gè)Java程序是最簡(jiǎn)單的,主要有設(shè)置斷點(diǎn)、啟動(dòng)調(diào)試、單步執(zhí)行、結(jié)束調(diào)試幾步。
設(shè)置斷點(diǎn):前面已經(jīng)說(shuō)過(guò)。
啟動(dòng)調(diào)試:Eclipse提供四種方式來(lái)啟動(dòng)程序(Launch)的調(diào)試,分別是通過(guò)菜單(Run –> Debug)、圖標(biāo)(“綠色臭蟲(chóng)”)、右鍵->Debug As以及快捷鍵(F11),在這一點(diǎn)上,與其他命令(例如Run)類似。
單步執(zhí)行:主要使用前面講過(guò)的幾個(gè)視圖進(jìn)行調(diào)試,其中debug視圖中的幾個(gè)按鈕有快捷鍵:
Step Retuen(F7)
Step Over (F6)
Step Into (F5)
結(jié)束調(diào)試:通過(guò)Terminate命令終止對(duì)本地程序的調(diào)試。
2、遠(yuǎn)程調(diào)試
遠(yuǎn)程調(diào)試主要用于調(diào)試非本地Java程序,這里的非本地并不是只在其他人的機(jī)器上才叫非本地。運(yùn)行在本機(jī)上的Web服務(wù)器上的程序在調(diào)試時(shí)也需要使用遠(yuǎn)程調(diào)試。遠(yuǎn)程調(diào)試的大致步驟和調(diào)試本地Java語(yǔ)言程序基本一直,只是在設(shè)置上有些不同。
Eclipse 調(diào)試器可以調(diào)試遠(yuǎn)程應(yīng)用程序。它可以連接到一個(gè)運(yùn)行?Java?應(yīng)用程序的遠(yuǎn)程?VM,將自己連接到該應(yīng)用程序上去。使用遠(yuǎn)程調(diào)試會(huì)話與使用本地調(diào)試會(huì)話大致相同。但是,遠(yuǎn)程調(diào)試配置需要在?Run > Debug?窗口中配置一些不同的設(shè)置。需要在左側(cè)視圖中先選擇?Remote Java Application?選項(xiàng),然后單擊?New。這樣就創(chuàng)建了一個(gè)新的遠(yuǎn)程啟動(dòng)配置,會(huì)顯示出三個(gè)選項(xiàng)卡:Connect、Source?和?Common。
?
在 Connect 選項(xiàng)卡的?Project?字段,選擇在啟動(dòng)搜索源代碼時(shí)要引用的項(xiàng)目。在 Connect 選項(xiàng)卡的?Host?字段,輸入運(yùn)行 Java 程序的遠(yuǎn)程主機(jī)的 IP 地址或域名。在 Connect 選項(xiàng)卡的?Port?字段,輸入遠(yuǎn)程 VM 接收連接的端口。通常,該端口在啟動(dòng)遠(yuǎn)程 VM 時(shí)指定。如果想讓調(diào)試器決定在遠(yuǎn)程會(huì)話中?Terminate?命令是否可用,可以選擇?Allow termination of remote VM?選項(xiàng)。如果希望可以終止連接的 VM,則選擇該選項(xiàng)。現(xiàn)在,在選擇?Debug?選項(xiàng)時(shí),調(diào)試器會(huì)嘗試連接到指定地址或端口的遠(yuǎn)程 VM,結(jié)果會(huì)在 Debug 視圖中顯示出來(lái)。
總結(jié)
以上是生活随笔為你收集整理的Eclipse调试方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Linux下的磁盘空间管理
- 下一篇: 木瓜炖牛奶下奶吗