使用Eclipse調(diào)試Java程序代碼
原創(chuàng)【51CTO獨(dú)家特稿】創(chuàng)建Java項(xiàng)目
當(dāng)Eclipse首次啟動(dòng)時(shí)進(jìn)入的是資源透視圖,在這個(gè)透視圖中可以管理項(xiàng)目、文件夾、文件和其它資源,按照Eclipse的說(shuō)法,這些面板叫做視圖,一套完整的視圖叫做透視圖,在資源透視圖中,你可以使用左上方的視圖(導(dǎo)航視圖)導(dǎo)航和創(chuàng)建資源。
在Eclipse中做事之前,如創(chuàng)建Java程序,需創(chuàng)建一個(gè)Java項(xiàng)目,創(chuàng)建Java項(xiàng)目的步驟如下:
1、在導(dǎo)航視圖上點(diǎn)擊右鍵,在彈出的上下文菜單中選擇新建項(xiàng)目;
2、在新建項(xiàng)目對(duì)話(huà)框中,Eclipse提供了項(xiàng)目選項(xiàng):Java,插件開(kāi)發(fā)等。因此你想要?jiǎng)?chuàng)建一個(gè)Java項(xiàng)目,在對(duì)話(huà)框左邊選擇Java;
3、在對(duì)話(huà)框右邊選擇Java項(xiàng)目,如果你還安裝了其它Java插件開(kāi)發(fā)包,在這里也會(huì)一起列出來(lái)(如EJB,Servlet等),Eclipse默認(rèn)安裝的JDT僅支持標(biāo)準(zhǔn)Java應(yīng)用程序,因此你必須選擇Java項(xiàng)目選項(xiàng);
4、點(diǎn)擊下一步進(jìn)入新建項(xiàng)目向?qū)?duì)話(huà)框;
5、首先給項(xiàng)目命一個(gè)名字,因?yàn)槭且粋€(gè)簡(jiǎn)單的“Hello, world”例子,因此這里我輸入“Hello”,點(diǎn)擊下一步,設(shè)置構(gòu)建Java項(xiàng)目的設(shè)置選項(xiàng),對(duì)于這個(gè)項(xiàng)目你不需要做任何修改即可;
6、點(diǎn)擊完成;
7、Eclipse此時(shí)會(huì)提示你這種項(xiàng)目是和Java透視圖關(guān)聯(lián)的,并詢(xún)問(wèn)你是否切換到Java透視圖,選擇是。
創(chuàng)建Java類(lèi)
當(dāng)你創(chuàng)建好Java項(xiàng)目后就可以開(kāi)始創(chuàng)建Java程序了,盡管不是非得這么做,但這樣可以將你的Java類(lèi)組織到包中,這是一次很好的實(shí)踐,通常使用域名做為包名,這樣可以減少名字沖突的可能性,如果你沒(méi)有注冊(cè)域名,也可以使用任何方便的,唯一的hoc名,我在這里使用org.eclipseguide,項(xiàng)目名是hello,因此包的全名就是org.eclipseguide.hello。
按照下列步驟創(chuàng)建Java程序:
1、在項(xiàng)目上點(diǎn)擊右鍵,選擇New.Class彈出新建Java類(lèi)向?qū)В?/P>
2、第一個(gè)字段區(qū)域“源文件夾”默認(rèn)是項(xiàng)目的文件夾,保持默認(rèn)值;
3、在包字段區(qū)域輸入org.eclipseguide.hello;
4、在類(lèi)名字段區(qū)域輸入HelloWorld;
5、在“Which Method Stubs Would You Like to Create?”區(qū)域下,選中public static void main(String[] args),新建Java類(lèi)的對(duì)話(huà)框如圖1所示。
圖- 1 使用新建Java類(lèi)向?qū)?chuàng)建HelloWorld類(lèi)
6、點(diǎn)擊完成,新建java類(lèi)向?qū)?huì)為程序包創(chuàng)建一系列目錄,HelloWorld.java源文件將會(huì)放在這個(gè)包名下面。
自動(dòng)創(chuàng)建的代碼包括一個(gè)main( )方法,你可以向里面添加任何功能,如打印你的Hello, world!,為了使調(diào)試變得更有趣,你需要添加一個(gè)循環(huán)打印的方法,在Eclipse中修改自動(dòng)生成的代碼,如下:
public class HelloWorld { |
運(yùn)行Java程序
現(xiàn)在你已經(jīng)可以運(yùn)行這個(gè)Java程序了,在運(yùn)行Java程序時(shí)需要考慮多個(gè)事情,包括Java運(yùn)行環(huán)境,是否需要命令行參數(shù),如果不知一個(gè)類(lèi)有main( )函數(shù)究竟該使用哪一個(gè),在Eclipse中正確啟動(dòng)一個(gè)Java程序的方法是從Eclipse菜單中選擇“運(yùn)行運(yùn)行”,此時(shí)會(huì)彈出一個(gè)對(duì)話(huà)框,讓你配置啟動(dòng)選項(xiàng),在運(yùn)行一個(gè)Java程序前,你需要?jiǎng)?chuàng)建一個(gè)啟動(dòng)配置或從現(xiàn)有配置中選擇一個(gè)。
對(duì)于大多數(shù)簡(jiǎn)單的Java程序而言,你不需要指定啟動(dòng)配置,因此你可以使用更簡(jiǎn)單的方法啟動(dòng)程序,首先確保編輯器中HelloWorld源代碼是全部選中的,然后:
1、從Eclipse菜單中選擇運(yùn)行以...運(yùn)行Java應(yīng)用程序;
2、因?yàn)槟阋呀?jīng)對(duì)Java程序做出了修改,Eclipse會(huì)提示你在運(yùn)行Java程序前先保存一下,點(diǎn)擊確定;
3、任務(wù)視圖切換到控制臺(tái)視圖,顯示程序輸出,如圖2所示。
圖- 2 Eclipse控制臺(tái)視圖顯示HelloWorld程序運(yùn)行輸出
你可能疑惑為什么沒(méi)有單獨(dú)的步驟將.java文件編譯成.class文件,這是因?yàn)镋clipse JDT包含了一個(gè)增量的編譯器來(lái)評(píng)估你輸入的Java程序代碼,它可以高亮顯示語(yǔ)法錯(cuò)誤和不完整的引用,和其它Eclipse友好的特性一樣,如果你覺(jué)得這個(gè)功能對(duì)你沒(méi)用,你完全可以關(guān)閉它,如果編譯成功,.class文件會(huì)在保存源文件時(shí)同步保存。
調(diào)試Java程序
在Eclipse中交互式運(yùn)行代碼是其最強(qiáng)大的特性之一,使用JDT調(diào)試器,你可以逐行執(zhí)行你的Java程序,檢查程序不同位置變量的值,這個(gè)過(guò)程在定位代碼中的問(wèn)題時(shí)非常有用。
為了準(zhǔn)備調(diào)試,你需要在代碼中設(shè)置一個(gè)斷點(diǎn)先,以便讓調(diào)試器暫停執(zhí)行允許你調(diào)試,否則,程序會(huì)從頭執(zhí)行到尾,你就沒(méi)有機(jī)會(huì)調(diào)試了。為了設(shè)置一個(gè)斷點(diǎn),在編輯器左邊灰色邊緣雙擊,這里將say()函數(shù)位置設(shè)置為斷點(diǎn),此時(shí)將會(huì)顯示一個(gè)藍(lán)色的小點(diǎn),表示一個(gè)活動(dòng)的斷點(diǎn)。
在調(diào)試器下運(yùn)行程序和運(yùn)行它非常類(lèi)似,Eclipse提供了兩個(gè)選項(xiàng):選擇“使用全方位服務(wù)運(yùn)行調(diào)試”菜單使用一個(gè)快捷配置,如果默認(rèn)選項(xiàng)正確,也可以選擇“運(yùn)行以...調(diào)試Java應(yīng)用程序”。在這里我們使用后者。
確保編輯器中的HelloWorld代碼被全部選中了,然后從主菜單中選擇“運(yùn)行以...調(diào)試Java應(yīng)用程序”,Eclipse將會(huì)啟動(dòng)程序,切換到調(diào)試透視圖,在斷點(diǎn)暫停執(zhí)行,如圖3所示。
圖- 3 調(diào)試HelloWorld:在第一個(gè)斷點(diǎn)執(zhí)行被暫停
調(diào)試透視圖包括多個(gè)新的視圖,都是用于調(diào)試使用的,首先,在左上方是調(diào)試視圖(不要和調(diào)試透視圖混淆了),它顯示了所有調(diào)用堆和當(dāng)前所有線(xiàn)程的狀態(tài),包括所有已經(jīng)執(zhí)行完畢的線(xiàn)程,程序運(yùn)行到斷點(diǎn)位置時(shí),狀態(tài)顯示為暫停。
單步調(diào)試代碼
調(diào)試視圖的標(biāo)題欄是一個(gè)讓你可以控制Java程序執(zhí)行的工具欄,前面幾個(gè)按鈕和電子設(shè)備,如CD播放器的控制按鈕風(fēng)格非常類(lèi)似,允許你暫停、繼續(xù)和終止程序,這些按鈕讓你可以一行一步地執(zhí)行程序代碼,鼠標(biāo)移動(dòng)到每個(gè)按鈕上時(shí)都會(huì)顯示按鈕提示信息,如跟蹤,單步,返回等。
如第二個(gè)按鈕跟蹤,當(dāng)前執(zhí)行的程序代碼在編輯器中處于高亮狀態(tài):調(diào)用say()函數(shù)。如果跟蹤的話(huà)就會(huì)進(jìn)入這個(gè)函數(shù)內(nèi)部,點(diǎn)擊跟蹤后,高亮的行是首先執(zhí)行的行 — for語(yǔ)句。
一般情況下,你只想跟蹤你自己寫(xiě)的類(lèi),對(duì)于標(biāo)準(zhǔn)類(lèi)和第三方類(lèi)通常沒(méi)有什么問(wèn)題,是不需要跟蹤的,這時(shí)候可以使用過(guò)濾后跟蹤功能,即Step With Filters,選擇Window.Preferences.Java.Debug.Step過(guò)濾器,然后選擇列出的包和類(lèi),多花點(diǎn)時(shí)間設(shè)置過(guò)濾器可以有效減輕調(diào)試難度,當(dāng)你使用普通的跟蹤調(diào)試功能時(shí)經(jīng)常會(huì)遇到許多未知錯(cuò)誤,這時(shí)使用過(guò)濾跟蹤就能很好解決這一問(wèn)題。
評(píng)估變量和表達(dá)式
調(diào)試視圖的右邊是一個(gè)標(biāo)簽視窗包含視圖,在這里你可以檢查和修改變量和斷點(diǎn),選擇變量標(biāo)簽頁(yè),這個(gè)視圖顯示了當(dāng)前范圍的變量及其值,在進(jìn)入for循環(huán)之前,這個(gè)視圖僅包括say()函數(shù)的msg參數(shù)及其值,單機(jī)單步或跟蹤按鈕進(jìn)入for循環(huán),變量視圖將會(huì)顯示循環(huán)標(biāo)志i及其值0。
有時(shí)一個(gè)Java程序有許多變量,但你僅對(duì)其中一個(gè)或幾個(gè)感興趣,為了監(jiān)視選擇的變量和表達(dá)式,你可以將它們添加到表達(dá)式視圖中的監(jiān)視列表中,例如,選擇一個(gè)變量i(在編輯器中雙擊它),點(diǎn)擊右鍵,從彈出的右鍵菜單中選擇監(jiān)視,這個(gè)變量(及其值)就會(huì)顯示在表達(dá)式視圖中。
監(jiān)視變量的一個(gè)好處是你可以檢查對(duì)象和它們的值的詳細(xì)信息,并且可以修改它們的值。返回到變量視圖,展開(kāi)msg變量顯示它的屬性,它是一個(gè)char數(shù)組,展開(kāi)msg字符串可以顯示它的值,例如,雙擊H,會(huì)提示你輸入一個(gè)新值,如J。
在同一個(gè)標(biāo)簽視窗中的是顯示視圖,它允許你輸入任何允許的變量或包括這些變量的實(shí)例表達(dá)式,選擇顯示視圖然后輸入:
msg.charAt(i)
為了快速評(píng)估這個(gè)表達(dá)式,你必須先選中它,然后點(diǎn)擊第二個(gè)顯示視圖工具按鈕(顯示所選文本評(píng)估結(jié)果),它在顯示視圖中顯示結(jié)果,通常最好點(diǎn)擊第一個(gè)工具按鈕(檢查所選文本評(píng)估結(jié)果),因?yàn)樗砑颖磉_(dá)式到表達(dá)式視圖中,不管使用哪種方法,當(dāng)表達(dá)式中的變量發(fā)生變化時(shí),顯示的值都不回自動(dòng)更新。但在表達(dá)式視圖中,你可以講表達(dá)式轉(zhuǎn)為監(jiān)視表達(dá)式,當(dāng)你單步調(diào)試代碼時(shí)就會(huì)自動(dòng)更新,切換到表達(dá)式視圖,注意檢查按鈕顯示下一個(gè)表達(dá)式,點(diǎn)擊表達(dá)式然后從彈出的上下文菜單中選擇轉(zhuǎn)換成監(jiān)視表達(dá)式,下一個(gè)表達(dá)式圖標(biāo)將會(huì)變成監(jiān)視圖標(biāo)。
我們還是回到單步調(diào)試代碼中,你前面在調(diào)用System.out.println()時(shí)留下了游標(biāo),如果你想查看System.out.println()的代碼,你可以點(diǎn)擊跟蹤,否則就點(diǎn)擊單步執(zhí)行System.out.println()函數(shù),開(kāi)始下一個(gè)for循環(huán)。
在編輯器下方是連一個(gè)標(biāo)簽視窗,包括控制臺(tái)視圖,程序輸出就顯示在這里,如果你象前面說(shuō)的那樣將H改為J了,那這里將會(huì)顯示Jello, world!。你也可以點(diǎn)擊單步執(zhí)行,直到循環(huán)終止,如果你覺(jué)得這個(gè)過(guò)程太過(guò)冗長(zhǎng),也可以點(diǎn)擊返回快速結(jié)束say()函數(shù)返回到main()函數(shù),或者點(diǎn)擊繼續(xù)按鈕讓Java程序運(yùn)行到終點(diǎn)。
小結(jié)
Eclipse最有用的特性之一就是它集成的調(diào)試器,它可以交互式執(zhí)行代碼,通過(guò)設(shè)置斷點(diǎn),逐行執(zhí)行代碼,檢查變量和表達(dá)式的值等功能反應(yīng)其強(qiáng)大的功能,它是一款檢查和修復(fù)Java程序代碼問(wèn)題的不可替代的工具。
您正在閱讀的是“使用Eclipse調(diào)試Java程序代碼”
【編輯推薦】