欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Eclipse的Debug調(diào)試技巧大全(總結(jié))

 更新時(shí)間:2017年12月02日 17:14:53   作者:lfendo  
這篇文章主要介紹了Eclipse的Debug調(diào)試技巧大全(總結(jié)),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

作為開發(fā)人員,掌握開發(fā)環(huán)境下的調(diào)試技巧十分有必要。我們?cè)诰帉慾ava程序的過(guò)程中,經(jīng)常會(huì)遇到各種莫名其妙的問(wèn)題,為了檢測(cè)程序是哪里出現(xiàn)問(wèn)題,經(jīng)常需要增加日志,看變量的值,這樣調(diào)試很麻煩。假設(shè)我每天花費(fèi)1小時(shí)在調(diào)試我的應(yīng)用程序上的話,那累積起來(lái)的話也是很大量的時(shí)間。由于這個(gè)原因,用這些時(shí)間來(lái)重視并了解所有使我們調(diào)試更方便的功能。那能為你省下一些時(shí)間,也將會(huì)使你的生活更安逸、輕松。

一、Debug視圖

調(diào)試中最常用的窗口是:

窗口 說(shuō)明
Debug窗口 主要顯示當(dāng)前線程方法調(diào)用棧, 以及代碼行數(shù)(有調(diào)試信息的代碼)
斷點(diǎn)Breakpoints窗口 => 斷點(diǎn)列表窗口,可以方便增加斷點(diǎn),設(shè)置斷點(diǎn)條件,刪除斷點(diǎn)等
變量Variables窗口 => 顯示當(dāng)前方法的本地變量,非static方法,包含this應(yīng)用,可以修改變量值
代碼編輯窗口 => 這個(gè)不用多說(shuō)了
輸出Console窗口 => 日志等輸出內(nèi)容,調(diào)試時(shí),可以將關(guān)注的組件級(jí)別設(shè)置低一點(diǎn),以便獲得跟多輸出信息

另外輔助的窗口有:

窗口 說(shuō)明
表達(dá)式expression窗口 => 寫上自己需要觀察的數(shù)據(jù)的表達(dá)式,或者修改變量值
Display窗口 => 可以在display中執(zhí)行代碼塊,輸出內(nèi)容等
大綱Outline窗口 => 查看當(dāng)前類的方法,變量等
類型層級(jí)Type hierarchy窗口 => 查看當(dāng)前所在類的繼承層次,包括實(shí)現(xiàn)接口,類繼承層次
方法調(diào)用關(guān)系Call hierarchy窗口 => 查看當(dāng)前方法被哪些方法調(diào)用,調(diào)用方法在哪些類中、第幾行,可以直接打開對(duì)應(yīng)的方法
搜索結(jié)果Search窗口 => 結(jié)合快捷鍵可以查看變量、方法等在工作空間、項(xiàng)目、工作集中被引用或定義的代碼位置

1)窗口全覽:


2)Debug View(線程堆棧視圖):

debug視圖允許您在工作臺(tái)上管理正在調(diào)試和運(yùn)行的程序,他顯示了你正在調(diào)試的程序中掛起的線程的堆棧幀,程序中的每個(gè)線程作為樹的節(jié)點(diǎn)出現(xiàn)。他展示了正在運(yùn)行的每個(gè)目標(biāo)的進(jìn)程。如果線程被掛起,它的堆棧幀以子元素的形式展示。以下是一些常用的debug按鈕:


1.表示當(dāng)前實(shí)現(xiàn)繼續(xù)運(yùn)行直到下一個(gè)斷點(diǎn),快捷鍵為F8。

2.表示打斷整個(gè)進(jìn)程

3.表示進(jìn)入當(dāng)前方法,快捷鍵為F5。

4.表示運(yùn)行下一行代碼,快捷鍵為F6。

5.表示退出當(dāng)前方法,返回到調(diào)用層,快捷鍵為F7。

6.表示當(dāng)前線程的堆棧,從中可以看出在運(yùn)行哪些代碼,并且整個(gè)調(diào)用過(guò)程,以及代碼行號(hào)

詳細(xì)介紹:

 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)前方法的開頭第一行重新開始執(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í),可以開啟Step Filters進(jìn)行過(guò)濾,程序會(huì)一直執(zhí)行直到遇到未經(jīng)過(guò)濾的位置或斷點(diǎn)。Step Filters功能由Use Step Filters,Edit Step Filters,F(xiàn)ilter Type,F(xiàn)ilter 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:?jiǎn)尾綀?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連接。

1、調(diào)試執(zhí)行

標(biāo)記 功能 快捷鍵 描述
6.4 Step Info F5 -> 單步進(jìn)入(如果有方法調(diào)用,將進(jìn)入調(diào)用方法中進(jìn)行調(diào)試);
6.4 Step Over F6 -> 單步跳過(guò)(不進(jìn)入行的任何方法調(diào)用中,直接執(zhí)行完當(dāng)前代碼行,并跳到下一行);
6.4 Step Return F7 -> 單步返回(執(zhí)行完當(dāng)前方法,并從調(diào)用棧中彈出當(dāng)前方法,返回當(dāng)前方法被調(diào)用處);
6.5 Resume F8 -> 恢復(fù)正常執(zhí)行(直到遇到下一個(gè)斷點(diǎn));
7.4 Run to Line Ctrl+R -> 執(zhí)行到當(dāng)前行(將忽略中間所有斷點(diǎn),執(zhí)行到當(dāng)前光標(biāo)所在行);
6.3 Drop To Frame 無(wú) -> 回退到指定方法開始處執(zhí)行,這個(gè)功能相當(dāng)贊。
在方法調(diào)用棧上的某個(gè)方法右鍵,選擇Drop To Frame就可以從該方法的開始處執(zhí)行
比如重新執(zhí)行本方法,可以在本方法上用Drop To Frame,將從本方法的第一行重新執(zhí)行。
當(dāng)然對(duì)于有副作用的方法,比如數(shù)據(jù)庫(kù)操作,更改傳入?yún)?shù)的對(duì)象內(nèi)容等操作可能重新執(zhí)行就再是你想要的內(nèi)容了。
6.1+6.2 Copy Stack 無(wú) -> 拷貝當(dāng)前線程棧信息

如果在調(diào)試時(shí),需要排除一些類、包等不需要進(jìn)入調(diào)試,可以使用Edit Step Filters設(shè)置。 

A6的properties: Java進(jìn)程啟動(dòng)相關(guān)信息,包括控制臺(tái)啟動(dòng)參數(shù),環(huán)境參數(shù)等。如果參數(shù)啟動(dòng)參數(shù)有問(wèn)題可以先看看這里的實(shí)際啟動(dòng)參數(shù)是不是有誤。另外還可以查看虛擬機(jī)支持調(diào)試的相關(guān)選項(xiàng)。


2、數(shù)據(jù)查看

標(biāo)記 功能 快捷鍵 描述
7.4 Inspect ctrl+shift+i -> 察看選擇的變量、表達(dá)式的值或執(zhí)行結(jié)果, 再次按ctrl+shift+i可以將當(dāng)前表達(dá)式或值添加到Expressions窗口中查看;
7.4 Display ctrl+shift+d -> 顯示選擇的變量、表達(dá)式的值或執(zhí)行結(jié)果, 再次按ctrl+shift+d可以將當(dāng)前表達(dá)式或值添加到Display窗口中顯示;
7.4 Execute ctrl+u -> 執(zhí)行選擇表達(dá)式;
7.4 Run to Line ctrl+r -> 執(zhí)行到當(dāng)前行(將忽略中間所有斷點(diǎn),執(zhí)行到當(dāng)前光標(biāo)所在行);
7.3 All Instances ctrl+shift+n -> 查看選擇的類的所有對(duì)象,這個(gè)功能超贊;
7.3 Instance Count 無(wú) -> 查看選擇的類的所有對(duì)象個(gè)數(shù);
7.4 Watch 無(wú) -> 添加當(dāng)前變量、表達(dá)式到Expressions窗口中;

3)Variables View (變量視圖)


1.為變量名視圖,顯示當(dāng)前代碼行中所有可以訪問(wèn)的實(shí)例變量和局部變量

2.顯示所有的變量值

3.可以通過(guò)該窗口來(lái)改變變量值

Variables View顯示與Debug View中選定的堆棧幀相關(guān)的變量信息,調(diào)試Java程序時(shí),變量可以選擇將更詳細(xì)的信息顯示在詳細(xì)信息窗格中。此外,Java對(duì)象還可以顯示出其包含的屬性的值。在該窗口中選中變量鼠標(biāo)右鍵點(diǎn)擊可以進(jìn)行許多操作,主要操作有以下這些:

All Instances:打開一個(gè)對(duì)話框來(lái)顯示該java類的所有實(shí)例,使用該功能需要java虛擬機(jī)支持實(shí)例的檢索。

All References::打開一個(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)行查找。

4)Breakpoints View (斷點(diǎn)視圖)


1.顯示所有斷點(diǎn)

2. 將當(dāng)前窗口1中選中的端口失效,再次點(diǎn)擊啟用。

3.異常斷點(diǎn)

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í)候就掛起。

5)Expressions View (表達(dá)式視圖)


1.表達(dá)式

2. 點(diǎn)擊此可以新增一個(gè)表達(dá)式

要在 Debug 透視圖的編輯器中求表達(dá)式的值,選中設(shè)置有斷點(diǎn)的一整行,并在上下文菜單中選擇 Inspect 選項(xiàng)。表達(dá)式是在當(dāng)前堆棧幀的上下文中求值的,其結(jié)果顯示在 Display 窗口的 Expressions 視圖中。 比如我想要計(jì)算變量a+b的值,那么就可以在表達(dá)式視圖中加一個(gè)表達(dá)式:a+b

6)Display View 


可以使用這個(gè)視圖,輸入或者演算一些新的代碼。這些代碼在當(dāng)前的調(diào)試位置的上下文環(huán)境中被執(zhí)行,這意味著,你可以使用所有變量甚至是內(nèi)容助手。要執(zhí)行你的代碼的話,只需標(biāo)記它,并使用右鍵菜單或者CTRL+U(執(zhí)行)或者 CTRL+SHIFT+I (檢查)

7)代碼查看輔助窗口

1、代碼視圖:

代碼視圖,用來(lái)顯示具體的代碼。其中綠色部分是指當(dāng)前將要執(zhí)行的代碼


標(biāo)記 功能 快捷鍵 描述
11.1~11.5 quick type hierarchy ctrl+t 查看當(dāng)前類、接口的繼承層次, 默認(rèn)進(jìn)入時(shí),顯示繼承/實(shí)現(xiàn)當(dāng)前類/方法的子類,子接口11.1;再次ctrl+t,將顯示當(dāng)前類、接口繼承/實(shí)現(xiàn)的超類/接口11.2;調(diào)試時(shí),經(jīng)常用該功能,在接口或抽象類的方法調(diào)用處11.3,ctrl+t察看實(shí)現(xiàn)類11.4,直接導(dǎo)航到對(duì)應(yīng)的實(shí)現(xiàn)方法中11.5。
  quick outline ctrl+o 查看當(dāng)前類的大綱,包括方法,屬性等內(nèi)容; 用處不大;
  open declarations F3 查看變量、屬性、方法定義的地方

2、Call Hierarchy窗口:

標(biāo)記 功能 快捷鍵 描述
12.1~12.2 open call hierarchy ctrl+alt+h 查看方法被調(diào)用層次, 可以看當(dāng)前方法被調(diào)用的地方12.1,或者當(dāng)前方法調(diào)用了其他類的方法12.2


3、Type Hierarchy窗口:

標(biāo)記 功能 快捷鍵 描述
13.1~13.4 open type hierarchy F4 查看繼承層次, 可以查看類的繼承層次,包括子類父類13.1, 或者類實(shí)現(xiàn)的接口繼承層次13.2,還會(huì)根據(jù)選擇的類/接口,在右邊顯示該類的大綱13.3、 13.4; 13.3可以選擇是否顯示父類/父接口的屬性、方法等

4、Search 窗口:

標(biāo)記 功能 快捷鍵 描述
14.1 declarations ctrl+g 相同的方法簽名在工作空間中及第三方j(luò)ar包中被定義的位置14.1
14.2 references ctrl+shif+g 當(dāng)前選中的變量、屬性、方法在工作空間中及第三方j(luò)ar包中被引用的位置14.2
14.3   ctrl+shift+u 查看變量、屬性 、方法在當(dāng)前類中出現(xiàn)的地方14.3
14.4 implements   查看實(shí)現(xiàn)當(dāng)前接口的類14.8
14.4~14.7 顯示方式   可以選擇不同的顯示方式,具體看圖


二、Debug

1.設(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ā)條件,一旦滿足某條件是才開始調(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ù)。

1.1)斷點(diǎn)類型及斷點(diǎn)窗口

在調(diào)試中可以設(shè)置的斷點(diǎn)類型有五種: 

1.行斷點(diǎn)(line breakpoints) : 條件斷點(diǎn),顧名思義就是一個(gè)有一定條件的斷點(diǎn),只有滿足了用戶設(shè)置的條件,代碼才會(huì)在運(yùn)行到斷點(diǎn)處時(shí)停止。

2.方法斷點(diǎn)(method breakpoints ): 方法斷點(diǎn)的特別之處在于它可以打在 JDK的源碼里,由于 JDK 在編譯時(shí)去掉了調(diào)試信息,所以普通斷點(diǎn)是不能打到里面的,但是方法斷點(diǎn)卻可以,可以通過(guò)這種方法查看方法的調(diào)用棧。

3.觀察斷點(diǎn)(watch breakpoints-成員變量訪問(wèn)變更)

4.異常斷點(diǎn)(exception breakpoints)

5.類加載斷點(diǎn)(class load breakpoints)

每種斷點(diǎn)的設(shè)置有些許不一樣,可以在斷點(diǎn)上右鍵->Breakpoint properties進(jìn)行設(shè)置,但一般在斷點(diǎn)窗口有快速設(shè)置的界面,Breakpoint properties中多了filter, 其實(shí)比較雞肋,用處不大。

斷點(diǎn)相關(guān)的快捷鍵:

快捷鍵 說(shuō)明
ctrl+shift+b 在光標(biāo)處大斷點(diǎn)/取消斷點(diǎn)
ctrl+alt+b 忽略所有斷點(diǎn)
Alt+shift+q, b 激活斷點(diǎn)窗口

1、行斷點(diǎn): 在方法中的某一行上打斷點(diǎn)1.1、1.4。行斷點(diǎn)可以設(shè)置掛起線程/VM的條件1.3,訪問(wèn)次數(shù)1.2。 

1.3中的條件是,spring在注冊(cè)Bean定義(registerBeanDefinition)時(shí),如果是org.springframework.demo.MyBean,就掛起線程,可以開始單步調(diào)試了。 

對(duì)于命中次數(shù)(hit count)1.2的使用,一般是在循環(huán)中,第N個(gè)對(duì)象的處理有問(wèn)題,設(shè)置hit count = N, 重調(diào)試時(shí),可以方便到達(dá)需要調(diào)試的循環(huán)次數(shù)時(shí),停下來(lái)調(diào)試。

2、方法斷點(diǎn):在方法上打斷點(diǎn)2.1、2.2。方法斷點(diǎn)的好處是可以從方法方法進(jìn)入或者退出時(shí)2.3,停下來(lái)調(diào)試,類似行斷點(diǎn),而且只有行斷點(diǎn)和方法斷點(diǎn)有條件和訪問(wèn)次數(shù)的設(shè)置功能。 

但是方法斷點(diǎn)還有另外一個(gè)好處,如果代碼編譯時(shí),指定不攜帶調(diào)試信息,行斷點(diǎn)是不起作用的,只能打方法斷點(diǎn)。 

有興趣的可以通過(guò)A1將Add line number… 前的勾去掉, 調(diào)試下看看。


3、觀察斷點(diǎn): 在成員變量上打的斷點(diǎn)3.1、3.3。只有對(duì)象成員變量有效果,靜態(tài)成員變量不起作用。 
可以設(shè)置變量被訪問(wèn)或者設(shè)置的時(shí)候掛起線程/VM 3.2,也就是類似3.4的所有對(duì)成員變量的訪問(wèn)或者設(shè)置的方法都會(huì)被監(jiān)控到 

4、異常斷點(diǎn): 異常斷點(diǎn)可以通過(guò)4.6添加,或者點(diǎn)擊日志信息中輸出的異常類信息添加。 
異常斷點(diǎn)4.1,系統(tǒng)發(fā)生異常時(shí),在被捕獲異常的拋出位置處或者程序未捕獲的異常拋出處4.2、4.4, 掛起線程/VM, 也可以指定是否包括異常的子類也被檢測(cè)4.3、4.5。 

另外除了以上正常設(shè)置的異常掛起,從java->debug中可以設(shè)置掛起執(zhí)行,主要有下面兩個(gè): 

1、是否在發(fā)生全局未捕獲時(shí)掛起(suspend execution on uncaught exceptions),調(diào)試時(shí),老是有異常掛起影響調(diào)試,但是沒(méi)有設(shè)置異常斷點(diǎn)的情況,就可以勾選掉這個(gè)選項(xiàng);

2、是否在編譯錯(cuò)誤時(shí)掛起,一般在邊調(diào)試邊改代碼時(shí)會(huì)發(fā)生這種情況;

另外要提一個(gè)的是有main方法啟動(dòng)的應(yīng)用,可以在調(diào)試配置中勾選stop in main A3, 程序進(jìn)入時(shí),會(huì)掛起線程,等待調(diào)試。




5、類加載斷點(diǎn): 在類名上打的斷點(diǎn)5.1。接口上是打不了類加載斷點(diǎn)的,但是抽象類是可以的,只是在調(diào)試的時(shí)候,斷點(diǎn)不會(huì)明顯進(jìn)入classloader中,單步進(jìn)入知會(huì)進(jìn)入到子類的構(gòu)造方法中,非抽象類在掛起線程后單步進(jìn)入就會(huì)到classloader中(如果沒(méi)有filter過(guò)濾掉的話)5.3。類加載斷點(diǎn)不管是打在抽象或者非抽象類上,都會(huì)在類第一次加載或者第一個(gè)子類第一次被加載時(shí),掛起線程/VM5.2。


2.調(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)試幾步。

1)設(shè)置斷點(diǎn):


2)啟動(dòng)調(diào)試:Eclipse提供四種方式來(lái)啟動(dòng)程序(Launch)的調(diào)試,分別是通過(guò)菜單(Run –> Debug)、圖標(biāo)(“綠色臭蟲”)、右鍵->Debug As以及快捷鍵(F11),在這一點(diǎn)上,與其他命令(例如Run)類似。


彈出提示,需要切換到調(diào)試(Debug)工作區(qū),勾選“Remember my decision”,記住選擇,則下次不再提示,然后點(diǎn)擊【Yes】。


3)單步執(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)試。

二、案例

場(chǎng)景一:小明寫了一個(gè)任務(wù)執(zhí)行者,該執(zhí)行者不間斷的執(zhí)行一些任務(wù),在現(xiàn)網(wǎng)上運(yùn)行了一段時(shí)間后,發(fā)現(xiàn)有概率的出現(xiàn)一些故障,發(fā)現(xiàn)運(yùn)行一段時(shí)間后,該任務(wù)者異常退出了,退出的因?yàn)槭强罩羔?,可以小明想要在本地debug,不知道斷點(diǎn)打在哪里,該問(wèn)題是概率事件,不一定會(huì)出現(xiàn),所以小明debug幾遍下來(lái)后,頭暈眼花,連代碼都看不清楚了,小明想要是能有個(gè)斷點(diǎn)每當(dāng)出現(xiàn)空指針異常的時(shí)候就停下來(lái)讓他發(fā)現(xiàn)問(wèn)題,那該多好呀。

異常斷點(diǎn)

異常斷點(diǎn):在定位問(wèn)題的過(guò)程中,常常會(huì)遇到斷點(diǎn)無(wú)法打到合適的位置,以至于和問(wèn)題的觸發(fā)點(diǎn)千差萬(wàn)別,所以這個(gè)時(shí)候不妨試試異常斷點(diǎn),顧名思義,異常斷點(diǎn)是指拋出某種異常后自動(dòng)掛起的斷點(diǎn)。

點(diǎn)擊紅色部位,增加一個(gè)異常斷點(diǎn)


輸入想要定位的異常類型,例如NullPointerException,這樣系統(tǒng)中拋出任何NullPointerException異常后,都會(huì)掛起當(dāng)前線程,給你機(jī)會(huì)去定位問(wèn)題。

場(chǎng)景二:小明寫了一個(gè)巨大的循環(huán),在調(diào)測(cè)代碼時(shí),小明發(fā)現(xiàn)每當(dāng)循環(huán)到第100000次的時(shí)候,就是出現(xiàn)問(wèn)題,沒(méi)有達(dá)到自己的預(yù)期,于是小明在循環(huán)里打了個(gè)斷點(diǎn),想看看到底怎么回事,可小明萬(wàn)萬(wàn)沒(méi)有想到,想要到達(dá)100000次循環(huán)是多么的困難,小明這個(gè)時(shí)候已經(jīng)開始浮想聯(lián)翩,如果能有這樣的斷點(diǎn):

 If 循環(huán)次數(shù)== 100000,線程停下來(lái)

條件斷點(diǎn)

如右圖,循環(huán)1000次,如果想要在循環(huán)到500次的時(shí)候停下來(lái),可以創(chuàng)建一個(gè)條件斷點(diǎn),右擊斷點(diǎn)懸著Breakpoint Properties。


選中Enable Condition

在空白處,添加你自己的條件,如果條件返回true,線程會(huì)被掛起,如果為false,則忽略該異常

Hit Count為該斷點(diǎn)經(jīng)過(guò)多少次后,正式掛起線程,如果設(shè)置為500,則表達(dá)前499次,經(jīng)過(guò)該斷點(diǎn)都不會(huì)停下,當(dāng)?shù)?00次,該斷點(diǎn)會(huì)掛起當(dāng)前線程。



表達(dá)式


表達(dá)式可以查看一些在當(dāng)前代碼中沒(méi)有的命令行,方便定位問(wèn)題。

場(chǎng)景三:小明最近遇到一個(gè)難題,在調(diào)用一個(gè)第三方插件時(shí)總是會(huì)有問(wèn)題,小明懷疑是第三方插件的bug,但小明沒(méi)有找到源碼不能進(jìn)行debug,小明該怎么辦呢?

Debug定位第三方插件的問(wèn)題

1.使用反編譯工具將代碼反編譯

2.將反編譯后的源碼進(jìn)行過(guò)濾

3.修復(fù)源碼編譯錯(cuò)誤

4.進(jìn)行debug

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • JavaWeb實(shí)現(xiàn)用戶登錄與注冊(cè)功能

    JavaWeb實(shí)現(xiàn)用戶登錄與注冊(cè)功能

    這篇文章主要為大家詳細(xì)介紹了JavaWeb實(shí)現(xiàn)用戶登錄與注冊(cè)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • SpringMVC基于配置的異常處理器

    SpringMVC基于配置的異常處理器

    這篇文章主要為大家介紹了SpringMVC基于配置的異常處理器,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • 詳解spring mvc對(duì)異步請(qǐng)求的處理

    詳解spring mvc對(duì)異步請(qǐng)求的處理

    spring mvc3.2及以上版本增加了對(duì)請(qǐng)求的異步處理,是在servlet3的基礎(chǔ)上進(jìn)行封裝的,有興趣的可以了解一下。
    2017-01-01
  • idea配置springboot熱部署終極解決辦法(解決熱部署失效問(wèn)題)

    idea配置springboot熱部署終極解決辦法(解決熱部署失效問(wèn)題)

    這篇文章主要介紹了idea配置springboot熱部署終極解決辦法(解決熱部署失效問(wèn)題),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2020-07-07
  • Java詳細(xì)講解異常Exception的處理

    Java詳細(xì)講解異常Exception的處理

    異常就是不正常,比如當(dāng)我們身體出現(xiàn)了異常我們會(huì)根據(jù)身體情況選擇喝開水、吃藥、看病、等?異常處理方法。?java異常處理機(jī)制是我們java語(yǔ)言使用異常處理機(jī)制為程序提供了錯(cuò)誤處理的能力,程序出現(xiàn)的錯(cuò)誤,程序可以安全的退出,以保證程序正常的運(yùn)行等
    2022-06-06
  • java基于Socket做一個(gè)簡(jiǎn)單下載器

    java基于Socket做一個(gè)簡(jiǎn)單下載器

    這篇文章主要為大家詳細(xì)介紹了java如何基于Socket制作一個(gè)簡(jiǎn)單下載器,感興趣的小伙伴們可以參考一下
    2016-08-08
  • Spring mvc防止數(shù)據(jù)重復(fù)提交的方法

    Spring mvc防止數(shù)據(jù)重復(fù)提交的方法

    這篇文章主要為大家詳細(xì)介紹了Spring mvc防止數(shù)據(jù)重復(fù)提交的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • Java的動(dòng)態(tài)綁定與雙分派_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java的動(dòng)態(tài)綁定與雙分派_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要介紹了Java的動(dòng)態(tài)綁定與雙分派,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • Java?CountDownLatch線程同步源碼硬核解析

    Java?CountDownLatch線程同步源碼硬核解析

    對(duì)于并發(fā)執(zhí)行,Java中的CountDownLatch是一個(gè)重要的類。為了更好的理解CountDownLatch這個(gè)類,本文將通過(guò)例子和源碼帶領(lǐng)大家深入解析這個(gè)類的原理,感興趣的可以學(xué)習(xí)一下
    2023-01-01
  • 詳解使用Spring MVC統(tǒng)一異常處理實(shí)戰(zhàn)

    詳解使用Spring MVC統(tǒng)一異常處理實(shí)戰(zhàn)

    本篇文章主要介紹了詳解使用Spring MVC統(tǒng)一異常處理實(shí)戰(zhàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-04-04

最新評(píng)論