版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
如何調(diào)試JAVA程序?總結(jié)人:luoji在你覺得有錯的地方設置斷點點擊甲殼蟲一樣的按鈕下面的子按鈕,也是甲殼蟲一樣的,叫Debug運行程序,當程序運行到剛才設置斷點的位置就會停下來,并且那行代碼底色會高亮顯示接著你在如下界面你可以看到你想要的信息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里面可以查看所有變量的值,比如剛才設置的斷點里面的strClassName的值就可以看到。6.下面按鈕第一個是進入方法執(zhí)行,比如你調(diào)用了其他方法,可以進入方法一步一步執(zhí)行,如果點擊第二個按鈕,只會在本方法內(nèi)一步一步執(zhí)行,第三個按鈕時你跳出此方法,繼續(xù)執(zhí)行調(diào)用這個方法的原方法。7下面這個按鈕時直接執(zhí)行完程序。調(diào)試類型這兒有很多調(diào)試方法,無論是在客戶端還是服務器端。我們在這個材料里面包含下面的方法:基本的Java字節(jié)碼(也就是使用System.out.println())使用注釋附加在一個正在運行的程序上遠程調(diào)試需求調(diào)試(Debuggingondemand)優(yōu)化代碼的調(diào)試Servlet,JSP文件以及EJB組件的調(diào)試在后面會詳細說明每一種類型的調(diào)試。共同的錯誤類型為了給你一個你將遇到什么的提示,我們在下面列出了開發(fā)者一次又一次遇到的普遍錯誤:編輯或句法錯誤是你最先和最容易遇到的錯誤。它們通常是鍵入錯誤引起的。邏輯錯誤不同于運行時錯誤,因為沒有任何異常被拋出,但是輸出不是期望的東西。這些錯誤的范圍從緩沖區(qū)溢出到內(nèi)存泄漏。運行時錯誤在程序執(zhí)行時發(fā)生并且通常產(chǎn)生一個Java異常。線程錯誤是最難重復和跟蹤的。JavadebuggingAPIsSun已經(jīng)定義了調(diào)試的結(jié)構(gòu),它們稱之為JBUG。這是為了回應對真正的Java調(diào)試器的需要做出的。這些APIs幫助程序員建立符合自己需要的調(diào)試器:?接口應該和語言的風格一樣是面向?qū)ο蟮摹@缇€程和監(jiān)視器這樣的Java運行時特性應該被前面的支持。可以進行遠程調(diào)試。在通常操作下的安全性不能被損害。修正的JavaDebugger(JDB)既是體現(xiàn)JavaDebuggingAPI的概念,同時又是一個有用的調(diào)試工具。它用JavaDebugInterface(JDI)重寫并且是JDK的一部分。JDB將在后面詳細討論。準備一個調(diào)試用的程序Java平臺為調(diào)試過程提供語言支持。你在用編譯器編譯你的程序時可以用編譯選項指示編譯器在目標文件中產(chǎn)生符號信息。如果你使用其它的編譯器而不是javac,參考你的編譯器的文檔獲得如何生成帶有調(diào)試信息的目標文件。如果你使用javac編譯器創(chuàng)建調(diào)試代碼,使用-g編譯選項。這個選項讓你在調(diào)試的時候可以檢查本機類實例和靜態(tài)變量。如果你沒有使用該選項生成你的類文件你也可以設置斷點和追蹤代碼,但是你將不能檢查變量。(斷點是手工指定的程序運行停止的點。)即使你使用-g選項編譯你的程序也不能調(diào)試JAVA平臺的核心系統(tǒng)類的局部變量。如果你需要列出某些系統(tǒng)類的局部變量的列表,你需要使用-g選項編譯這些類,也就是使用-g選項重新編譯rt?jar的類或者是src.zip里面的文件。然后指定你的classpath為正確的類文件使你用新編譯的類運行你的程序。在Java2下,使用bootclasspath選項使得新類被首先加載。記住如果你使用-0選項優(yōu)化你的代碼,你就不能調(diào)試你的類。優(yōu)化會將所有的調(diào)試信息從類中去掉。注意:檢查你的CLASSPATH環(huán)境變量是正確的才能讓調(diào)試器和Java程序知道在哪兒尋找你的類庫。你也應該檢查你的調(diào)試工具看是否需要其它的什么或者是環(huán)境變量。設置斷點調(diào)試的第一步就是找到代碼出錯的位置。斷點設置能幫你完成這個。斷點是你你放置在程序里面的臨時標記,它使得調(diào)試器知道在哪兒停止程序的執(zhí)行。例如,如果程序里面的某個申明引發(fā)問題,你可以將斷點設置在包含那個申明的行上,然后運行程序。在那個申明被執(zhí)行前程序停止執(zhí)行。然后你可以檢查變量、寄存器,存儲器以及堆棧的內(nèi)容,然后跨過(或執(zhí)行)那個申明查看問題是怎么引起的。不同的調(diào)試器支持不同的斷點。一些通用的類型是:行斷點在程序特定行的代碼被執(zhí)行前被引發(fā)。方法斷點在到達被設置成斷點的方法時被引發(fā)。計數(shù)斷點在某個計數(shù)器達到或超過某個特定值時被引發(fā)異常斷點在代碼拋出一個特定異常時被引發(fā)儲存變化斷點在存儲在特定地址范圍的內(nèi)容被修改時引發(fā)地址斷點在被設置成斷點的地址達到時被引發(fā)注意:一些調(diào)試器只在編譯版本的Java代碼(使用just-in-time編譯器生成的代碼)上支持某些斷點類型而不支持解釋代碼(使用javac工具生成的代碼)。一個例子就是地址斷點。每個工具在你能設置斷點的方式上可能有些不同。檢查你的工具的文檔。你可能會問,我如何知道在哪兒放置斷點?如果你對這個問題完全沒有感覺,你可以在main()方法的開始設置斷點如果你的代碼產(chǎn)生堆棧復寫(stacktrace),在程序產(chǎn)生它的地方設置斷點。你將在堆棧復寫里面看到源代碼中出問題的行號。如果你的輸出或者圖形顯示的特定部分沒有正確的顯示預定信息(例如文本域顯示錯誤的文本),你可以在該組件被創(chuàng)建的地方設置斷點。然后你可以單步執(zhí)行你的程序顯示和GUI對象相關(guān)的值。經(jīng)驗將在最合適的地方設置斷點。你在一個類或者程序里面可以設置多個斷點。通常,你在調(diào)試代碼的時候會禁止、激活、添加、刪除斷點。工具會允許你查看你所設置的所有斷點的位置同時給你一次刪除所有斷點的選項。單步執(zhí)行程序單步執(zhí)行程序是最終解決那些棘手的調(diào)試問題的方法。它允許你追蹤類里面的方法體的整個執(zhí)行過程。注意,你不需要設置斷點就可以停止一個GUI程序的執(zhí)行。設置斷點后在調(diào)試器里面開始執(zhí)行程序,當遇到第一個斷點后,你可以越過申明,進入方法體或類體,也可以繼續(xù)運行直到下一個斷點或程序結(jié)束。在調(diào)試程序的時候經(jīng)常遇到的術(shù)語有:進入執(zhí)行當前行。如果當前行包含一個方法調(diào)用,執(zhí)行被調(diào)用方法的第一行。如果類中的方法是用不帶調(diào)試信息的選項編譯的(也就是沒有使用-g選項),你將看到NoSourceAvailable消息。?越過執(zhí)行當前行而不會因為該行調(diào)用了一個方法或例程而停止。?返回從當前執(zhí)行點執(zhí)行并立即返回到調(diào)用當前方法的行。檢查變量通常,程序會因為一個變量的值沒有正確設置而進行核心轉(zhuǎn)儲(coredump)。最常見的是試圖進行一個值為null的計算或比較以及除零。找出這種問題的最簡單的辦法是在錯誤發(fā)生的地方檢查變量的值。最通常的情況是變量在那點沒有得到預期分配的值。可視化調(diào)試器通常有一個監(jiān)視窗口顯示你當前正在執(zhí)行的類的所有局部變量的值。某些調(diào)試器甚至顯示變量的地址或更進一步的允許你動態(tài)的改變變量的值以查看如果值是你原來預想的情況時程序是否能繼續(xù)執(zhí)行。命令行調(diào)試器通常提供命令提供相應的特性。使用命令行特性,你甚至可以通過顯示數(shù)組的每一行和每一列的內(nèi)容來查看整個數(shù)組。雖然大多調(diào)試器只在監(jiān)視窗口顯示類里面的局部變量,還是有一些調(diào)試器允許你在變量超出范圍后繼續(xù)監(jiān)視它。一些調(diào)試器支持查看寄存器。注意這只能是查看編譯的Java程序而不能是解釋的程序(字節(jié)碼程序)。堆棧復寫(Stacktraces)當Java程序進行內(nèi)核轉(zhuǎn)儲(coredumps)時它在控制臺產(chǎn)生我們稱之為堆棧復寫(stacktrace)的東西。堆棧復寫告訴開發(fā)者程序發(fā)生問題的精確路徑。它將說明類和方法名以及源代碼中的行數(shù)(如果你使用調(diào)試選項編譯)。如果你在發(fā)生堆棧復寫的開始處開始調(diào)試并停下,你可以向后查看你的代碼看看實際上是什么申明被執(zhí)行了。這是一個快速發(fā)現(xiàn)程序問題的辦法。你也可以使用下面的一個方法手動強制產(chǎn)生堆棧復寫。Throwable().printStackTrace()在調(diào)用該方法的那個點產(chǎn)生堆棧復與。復與將顯示方法調(diào)用所涉及到的線程。Thread.currentThread.dumpStack()只產(chǎn)生當前線程的一個快照。當你需要理解在什么條件下你的程序會產(chǎn)生堆棧復寫時使用強制復寫。下面的程序是一個強制堆棧復寫的例子。這個程序片斷進行文件拷貝。我們通過比較兩個文件的長度是否相等來判斷拷貝是否成功。如果不相等,我們向文件寫入復寫然后強制打印堆棧復寫(參看黑體的申明)。Throwable()是java.lang中的一個類,printStackTrace()是Throwable()的一個方法,它打印程序執(zhí)行路徑的復寫。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;}你可能會發(fā)現(xiàn)堆棧復寫中沒有行號。這可以簡單的稱為“編譯代碼”,要產(chǎn)生行號,使用nojit選項或者Djava
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 智能化口腔護理:進展
- 保護地球愛護環(huán)境演講稿(15篇)
- 廣告策劃師面試題及創(chuàng)意思維訓練含答案
- 2025年智能門鎖APP五年遠程控制安全分析報告
- ?2025山東蘭陵縣國有資產(chǎn)運營有限公司招聘4人筆試參考題庫附帶答案詳解(3卷合一版)
- 2025陜西煤業(yè)化工建設(集團)有限公司招聘(4人)筆試參考題庫附帶答案詳解(3卷合一版)
- 2025重慶國咨數(shù)據(jù)服務有限公司招聘18人筆試參考題庫附帶答案詳解(3卷合一版)
- 企業(yè)文秘面試常見問題解答
- 2025貴州省華貴人壽保險股份有限公司第一次社會招聘9人筆試參考題庫附帶答案詳解(3卷合一版)
- 2025莆田市秀嶼區(qū)石南輪渡有限公司招聘船長(編外合同制)2名筆試參考題庫附帶答案詳解(3卷)
- 剪紙社團匯報課件
- 掛名監(jiān)事免責協(xié)議書模板
- 2025房屋買賣合同范本(下載)
- 【MOOC期末】《模擬電子技術(shù)基礎》(華中科技大學)期末考試慕課答案
- 腦炎的護理課件
- 胎頭吸引技術(shù)課件
- 電池PACK箱體項目可行性研究報告(備案審核模板)
- 貴州省2023年7月普通高中學業(yè)水平合格性考試地理試卷(含答案)
- 實施“十五五”規(guī)劃的發(fā)展思路
- 資金無償贈予協(xié)議書
- 課件王思斌:社會工作概論
評論
0/150
提交評論