版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
如何調(diào)試JAVA程序?總結(jié)人:luoji在你覺(jué)得有錯(cuò)的地方設(shè)置斷點(diǎn)點(diǎn)擊甲殼蟲(chóng)一樣的按鈕下面的子按鈕,也是甲殼蟲(chóng)一樣的,叫Debug運(yùn)行程序,當(dāng)程序運(yùn)行到剛才設(shè)置斷點(diǎn)的位置就會(huì)停下來(lái),并且那行代碼底色會(huì)高亮顯示接著你在如下界面你可以看到你想要的信息3ServersiLCfilfCl走II■"“口e■"?rhl小口f'3ServersiLCfilfCl走II■"“口e■"?rhl小口f'tjin?fhrr諒13sFwrqn>nR'rpr'kwTifc1Ear^nRneWtlr邸口kwTr*l±9F^UfU:t?r'I'tir,「已卜'ir"Tir霑」円4'rfforqnrnplftrur*T?1LiitibiTigh^n^r^Tliit?卄-if畢每十*#汀口十丄眾術(shù)葉丄■feTBtl-[■積mi?:Ttr誦/[陀■口|”叮加啊d:[自fpe1! Af.DlTPEqpTR*hi-;[ilfFi'Ti?TEk材dTherald曲Thv^i^lI#Thr^irlThr^-iriz曲ThTMdMbVuidMesS3fcfcJgoints7410bDadrxMnhLi.xh^EtL-M*.?::■鼻曲TA=*Ligl平7亍科 l,ie^B)Dac-x-^BntFEETIL5)w工tGpl'L-t-lL&.I^irrlstlAipini-klBrl(3sPlPJDac-x-hiri'.'-liiri(i&MW:JlCXThintFEET■-?riq-Miii5.在Variables里面可以查看所有變量的值,比如剛才設(shè)置的斷點(diǎn)里面的strClassName的值就可以看到。6.下面按鈕第一個(gè)是進(jìn)入方法執(zhí)行,比如你調(diào)用了其他方法,可以進(jìn)入方法一步一步執(zhí)行,如果點(diǎn)擊第二個(gè)按鈕,只會(huì)在本方法內(nèi)一步一步執(zhí)行,第三個(gè)按鈕時(shí)你跳出此方法,繼續(xù)執(zhí)行調(diào)用這個(gè)方法的原方法。7下面這個(gè)按鈕時(shí)直接執(zhí)行完程序。調(diào)試類型這兒有很多調(diào)試方法,無(wú)論是在客戶端還是服務(wù)器端。我們?cè)谶@個(gè)材料里面包含下面的方法:基本的Java字節(jié)碼(也就是使用System.out.println())使用注釋附加在一個(gè)正在運(yùn)行的程序上遠(yuǎn)程調(diào)試需求調(diào)試(Debuggingondemand)優(yōu)化代碼的調(diào)試Servlet,JSP文件以及EJB組件的調(diào)試在后面會(huì)詳細(xì)說(shuō)明每一種類型的調(diào)試。共同的錯(cuò)誤類型為了給你一個(gè)你將遇到什么的提示,我們?cè)谙旅媪谐隽碎_(kāi)發(fā)者一次又一次遇到的普遍錯(cuò)誤:編輯或句法錯(cuò)誤是你最先和最容易遇到的錯(cuò)誤。它們通常是鍵入錯(cuò)誤引起的。邏輯錯(cuò)誤不同于運(yùn)行時(shí)錯(cuò)誤,因?yàn)闆](méi)有任何異常被拋出,但是輸出不是期望的東西。這些錯(cuò)誤的范圍從緩沖區(qū)溢出到內(nèi)存泄漏。運(yùn)行時(shí)錯(cuò)誤在程序執(zhí)行時(shí)發(fā)生并且通常產(chǎn)生一個(gè)Java異常。線程錯(cuò)誤是最難重復(fù)和跟蹤的。JavadebuggingAPIsSun已經(jīng)定義了調(diào)試的結(jié)構(gòu),它們稱之為JBUG。這是為了回應(yīng)對(duì)真正的Java調(diào)試器的需要做出的。這些APIs幫助程序員建立符合自己需要的調(diào)試器:?接口應(yīng)該和語(yǔ)言的風(fēng)格一樣是面向?qū)ο蟮?。例如線程和監(jiān)視器這樣的Java運(yùn)行時(shí)特性應(yīng)該被前面的支持??梢赃M(jìn)行遠(yuǎn)程調(diào)試。在通常操作下的安全性不能被損害。修正的JavaDebugger(JDB)既是體現(xiàn)JavaDebuggingAPI的概念,同時(shí)又是一個(gè)有用的調(diào)試工具。它用JavaDebugInterface(JDI)重寫(xiě)并且是JDK的一部分。JDB將在后面詳細(xì)討論。準(zhǔn)備一個(gè)調(diào)試用的程序Java平臺(tái)為調(diào)試過(guò)程提供語(yǔ)言支持。你在用編譯器編譯你的程序時(shí)可以用編譯選項(xiàng)指示編譯器在目標(biāo)文件中產(chǎn)生符號(hào)信息。如果你使用其它的編譯器而不是javac,參考你的編譯器的文檔獲得如何生成帶有調(diào)試信息的目標(biāo)文件。如果你使用javac編譯器創(chuàng)建調(diào)試代碼,使用-g編譯選項(xiàng)。這個(gè)選項(xiàng)讓你在調(diào)試的時(shí)候可以檢查本機(jī)類實(shí)例和靜態(tài)變量。如果你沒(méi)有使用該選項(xiàng)生成你的類文件你也可以設(shè)置斷點(diǎn)和追蹤代碼,但是你將不能檢查變量。(斷點(diǎn)是手工指定的程序運(yùn)行停止的點(diǎn)。)即使你使用-g選項(xiàng)編譯你的程序也不能調(diào)試JAVA平臺(tái)的核心系統(tǒng)類的局部變量。如果你需要列出某些系統(tǒng)類的局部變量的列表,你需要使用-g選項(xiàng)編譯這些類,也就是使用-g選項(xiàng)重新編譯rt?jar的類或者是src.zip里面的文件。然后指定你的classpath為正確的類文件使你用新編譯的類運(yùn)行你的程序。在Java2下,使用bootclasspath選項(xiàng)使得新類被首先加載。記住如果你使用-0選項(xiàng)優(yōu)化你的代碼,你就不能調(diào)試你的類。優(yōu)化會(huì)將所有的調(diào)試信息從類中去掉。注意:檢查你的CLASSPATH環(huán)境變量是正確的才能讓調(diào)試器和Java程序知道在哪兒尋找你的類庫(kù)。你也應(yīng)該檢查你的調(diào)試工具看是否需要其它的什么或者是環(huán)境變量。設(shè)置斷點(diǎn)調(diào)試的第一步就是找到代碼出錯(cuò)的位置。斷點(diǎn)設(shè)置能幫你完成這個(gè)。斷點(diǎn)是你你放置在程序里面的臨時(shí)標(biāo)記,它使得調(diào)試器知道在哪兒停止程序的執(zhí)行。例如,如果程序里面的某個(gè)申明引發(fā)問(wèn)題,你可以將斷點(diǎn)設(shè)置在包含那個(gè)申明的行上,然后運(yùn)行程序。在那個(gè)申明被執(zhí)行前程序停止執(zhí)行。然后你可以檢查變量、寄存器,存儲(chǔ)器以及堆棧的內(nèi)容,然后跨過(guò)(或執(zhí)行)那個(gè)申明查看問(wèn)題是怎么引起的。不同的調(diào)試器支持不同的斷點(diǎn)。一些通用的類型是:行斷點(diǎn)在程序特定行的代碼被執(zhí)行前被引發(fā)。方法斷點(diǎn)在到達(dá)被設(shè)置成斷點(diǎn)的方法時(shí)被引發(fā)。計(jì)數(shù)斷點(diǎn)在某個(gè)計(jì)數(shù)器達(dá)到或超過(guò)某個(gè)特定值時(shí)被引發(fā)異常斷點(diǎn)在代碼拋出一個(gè)特定異常時(shí)被引發(fā)儲(chǔ)存變化斷點(diǎn)在存儲(chǔ)在特定地址范圍的內(nèi)容被修改時(shí)引發(fā)地址斷點(diǎn)在被設(shè)置成斷點(diǎn)的地址達(dá)到時(shí)被引發(fā)注意:一些調(diào)試器只在編譯版本的Java代碼(使用just-in-time編譯器生成的代碼)上支持某些斷點(diǎn)類型而不支持解釋代碼(使用javac工具生成的代碼)。一個(gè)例子就是地址斷點(diǎn)。每個(gè)工具在你能設(shè)置斷點(diǎn)的方式上可能有些不同。檢查你的工具的文檔。你可能會(huì)問(wèn),我如何知道在哪兒放置斷點(diǎn)?如果你對(duì)這個(gè)問(wèn)題完全沒(méi)有感覺(jué),你可以在main()方法的開(kāi)始設(shè)置斷點(diǎn)如果你的代碼產(chǎn)生堆棧復(fù)寫(xiě)(stacktrace),在程序產(chǎn)生它的地方設(shè)置斷點(diǎn)。你將在堆棧復(fù)寫(xiě)里面看到源代碼中出問(wèn)題的行號(hào)。如果你的輸出或者圖形顯示的特定部分沒(méi)有正確的顯示預(yù)定信息(例如文本域顯示錯(cuò)誤的文本),你可以在該組件被創(chuàng)建的地方設(shè)置斷點(diǎn)。然后你可以單步執(zhí)行你的程序顯示和GUI對(duì)象相關(guān)的值。經(jīng)驗(yàn)將在最合適的地方設(shè)置斷點(diǎn)。你在一個(gè)類或者程序里面可以設(shè)置多個(gè)斷點(diǎn)。通常,你在調(diào)試代碼的時(shí)候會(huì)禁止、激活、添加、刪除斷點(diǎn)。工具會(huì)允許你查看你所設(shè)置的所有斷點(diǎn)的位置同時(shí)給你一次刪除所有斷點(diǎn)的選項(xiàng)。單步執(zhí)行程序單步執(zhí)行程序是最終解決那些棘手的調(diào)試問(wèn)題的方法。它允許你追蹤類里面的方法體的整個(gè)執(zhí)行過(guò)程。注意,你不需要設(shè)置斷點(diǎn)就可以停止一個(gè)GUI程序的執(zhí)行。設(shè)置斷點(diǎn)后在調(diào)試器里面開(kāi)始執(zhí)行程序,當(dāng)遇到第一個(gè)斷點(diǎn)后,你可以越過(guò)申明,進(jìn)入方法體或類體,也可以繼續(xù)運(yùn)行直到下一個(gè)斷點(diǎn)或程序結(jié)束。在調(diào)試程序的時(shí)候經(jīng)常遇到的術(shù)語(yǔ)有:進(jìn)入執(zhí)行當(dāng)前行。如果當(dāng)前行包含一個(gè)方法調(diào)用,執(zhí)行被調(diào)用方法的第一行。如果類中的方法是用不帶調(diào)試信息的選項(xiàng)編譯的(也就是沒(méi)有使用-g選項(xiàng)),你將看到NoSourceAvailable消息。?越過(guò)執(zhí)行當(dāng)前行而不會(huì)因?yàn)樵撔姓{(diào)用了一個(gè)方法或例程而停止。?返回從當(dāng)前執(zhí)行點(diǎn)執(zhí)行并立即返回到調(diào)用當(dāng)前方法的行。檢查變量通常,程序會(huì)因?yàn)橐粋€(gè)變量的值沒(méi)有正確設(shè)置而進(jìn)行核心轉(zhuǎn)儲(chǔ)(coredump)。最常見(jiàn)的是試圖進(jìn)行一個(gè)值為null的計(jì)算或比較以及除零。找出這種問(wèn)題的最簡(jiǎn)單的辦法是在錯(cuò)誤發(fā)生的地方檢查變量的值。最通常的情況是變量在那點(diǎn)沒(méi)有得到預(yù)期分配的值。可視化調(diào)試器通常有一個(gè)監(jiān)視窗口顯示你當(dāng)前正在執(zhí)行的類的所有局部變量的值。某些調(diào)試器甚至顯示變量的地址或更進(jìn)一步的允許你動(dòng)態(tài)的改變變量的值以查看如果值是你原來(lái)預(yù)想的情況時(shí)程序是否能繼續(xù)執(zhí)行。命令行調(diào)試器通常提供命令提供相應(yīng)的特性。使用命令行特性,你甚至可以通過(guò)顯示數(shù)組的每一行和每一列的內(nèi)容來(lái)查看整個(gè)數(shù)組。雖然大多調(diào)試器只在監(jiān)視窗口顯示類里面的局部變量,還是有一些調(diào)試器允許你在變量超出范圍后繼續(xù)監(jiān)視它。一些調(diào)試器支持查看寄存器。注意這只能是查看編譯的Java程序而不能是解釋的程序(字節(jié)碼程序)。堆棧復(fù)寫(xiě)(Stacktraces)當(dāng)Java程序進(jìn)行內(nèi)核轉(zhuǎn)儲(chǔ)(coredumps)時(shí)它在控制臺(tái)產(chǎn)生我們稱之為堆棧復(fù)寫(xiě)(stacktrace)的東西。堆棧復(fù)寫(xiě)告訴開(kāi)發(fā)者程序發(fā)生問(wèn)題的精確路徑。它將說(shuō)明類和方法名以及源代碼中的行數(shù)(如果你使用調(diào)試選項(xiàng)編譯)。如果你在發(fā)生堆棧復(fù)寫(xiě)的開(kāi)始處開(kāi)始調(diào)試并停下,你可以向后查看你的代碼看看實(shí)際上是什么申明被執(zhí)行了。這是一個(gè)快速發(fā)現(xiàn)程序問(wèn)題的辦法。你也可以使用下面的一個(gè)方法手動(dòng)強(qiáng)制產(chǎn)生堆棧復(fù)寫(xiě)。Throwable().printStackTrace()在調(diào)用該方法的那個(gè)點(diǎn)產(chǎn)生堆棧復(fù)與。復(fù)與將顯示方法調(diào)用所涉及到的線程。Thread.currentThread.dumpStack()只產(chǎn)生當(dāng)前線程的一個(gè)快照。當(dāng)你需要理解在什么條件下你的程序會(huì)產(chǎn)生堆棧復(fù)寫(xiě)時(shí)使用強(qiáng)制復(fù)寫(xiě)。下面的程序是一個(gè)強(qiáng)制堆棧復(fù)寫(xiě)的例子。這個(gè)程序片斷進(jìn)行文件拷貝。我們通過(guò)比較兩個(gè)文件的長(zhǎng)度是否相等來(lái)判斷拷貝是否成功。如果不相等,我們向文件寫(xiě)入復(fù)寫(xiě)然后強(qiáng)制打印堆棧復(fù)寫(xiě)(參看黑體的申明)。Throwable()是java.lang中的一個(gè)類,printStackTrace()是Throwable()的一個(gè)方法,它打印程序執(zhí)行路徑的復(fù)寫(xiě)。publicstaticbooleancopyFile(StringsourceFile,StringtargetFile){//seeifthecopysucceeded.if(success){//seeifthecorrectnumberofbyteswerecopiedlongnewFileLength=newFile(targetFile).length();if(oldFileLength!=newFileLength){Debug.trace(1,sourceFile+Constants.BLANK_STRING+Long.toString(oldFileLength));Debug.trace(1,targetFile+Constants.BLANK_STRING+Long.toString(newFileLength));Throwable().printStackTrace();returnfalse;}}elseDebug.trace(1,sourceFile);Debug.trace(1,targetFile);returnfalse;}returntrue;}你可能會(huì)發(fā)現(xiàn)堆棧復(fù)寫(xiě)中沒(méi)有行號(hào)。這可以簡(jiǎn)單的稱為“編譯代碼”,要產(chǎn)生行號(hào),使用nojit選項(xiàng)或者Djava
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 外勤機(jī)械工復(fù)試考核試卷含答案
- 刨插工安全培訓(xùn)效果評(píng)優(yōu)考核試卷含答案
- 玻璃制品手工成型工安全宣傳強(qiáng)化考核試卷含答案
- 海鹽采收工班組建設(shè)競(jìng)賽考核試卷含答案
- 絞車操作工安全素養(yǎng)競(jìng)賽考核試卷含答案
- 磚瓦生產(chǎn)工安全素養(yǎng)測(cè)試考核試卷含答案
- 海南房產(chǎn)中介培訓(xùn)課程
- 酒店員工培訓(xùn)計(jì)劃實(shí)施與跟蹤制度
- 酒店客房用品更換與補(bǔ)給制度
- 超市員工培訓(xùn)及業(yè)務(wù)知識(shí)制度
- 《肝臟手術(shù)的麻醉》課件
- GB/T 45026-2024側(cè)掃聲吶海洋調(diào)查規(guī)范
- 零星維修工程施工組織設(shè)計(jì)方案
- 新建加油站現(xiàn)場(chǎng)核查表
- 農(nóng)產(chǎn)品儲(chǔ)存安全管理制度
- 三年級(jí)數(shù)學(xué)五千以內(nèi)加減法題能力作業(yè)口算題大全附答案
- 臨床診斷學(xué)-胸部檢查課件
- 三力測(cè)試題70歲以上老人換領(lǐng)駕照
- 婦女保健之孕期運(yùn)動(dòng)與體重管理護(hù)理課件
- 職工食堂餐飲服務(wù)投標(biāo)方案(技術(shù)方案)
- (銀川市直部門(mén)之間交流)2022事業(yè)單位工作人員調(diào)動(dòng)表
評(píng)論
0/150
提交評(píng)論