在Eclipse中使用debug(Eclipse調(diào)試常用技巧)_第1頁(yè)
在Eclipse中使用debug(Eclipse調(diào)試常用技巧)_第2頁(yè)
在Eclipse中使用debug(Eclipse調(diào)試常用技巧)_第3頁(yè)
在Eclipse中使用debug(Eclipse調(diào)試常用技巧)_第4頁(yè)
在Eclipse中使用debug(Eclipse調(diào)試常用技巧)_第5頁(yè)
已閱讀5頁(yè),還剩3頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、Eclipse調(diào)試常用技巧發(fā)表時(shí)間:2010-04-06最后修改:2010-11-26記得剛剛畢業(yè)的時(shí)候,自己連斷點(diǎn)也不會(huì)打,當(dāng)時(shí)還在用JCreate,就連畢業(yè)設(shè)計(jì)也是用System.out找Bug的,想想真的很笨。開始工作后,一個(gè)星期過(guò)去了,在一個(gè)1、2百萬(wàn)行的系統(tǒng)中找 Bug,我依然在用 System.out,當(dāng)時(shí)最痛苦的就是修改代碼,每次找 到疑似Bug,就輸出一下,然后重啟(那時(shí)也不知道代碼熱替換),直到有一天帶我的導(dǎo) 師發(fā)現(xiàn)了這樣笨笨的調(diào)試Bug,才讓我第一次認(rèn)識(shí)了斷點(diǎn),也知道了代碼修改完了可以進(jìn)行熱替換,我這個(gè)中國(guó)教育的半犧牲品才算向美好生活邁進(jìn)了一小步。1、條件斷點(diǎn)斷點(diǎn)大家都比較

2、熟悉,在Eclipse Java編輯區(qū)的行頭雙擊就會(huì)得到一個(gè)斷點(diǎn),代碼會(huì)運(yùn)行到此處時(shí)停止。條件斷點(diǎn),顧名思義就是一個(gè)有一定條件的斷點(diǎn), 運(yùn)行到斷點(diǎn)處時(shí)停止。在斷點(diǎn)處點(diǎn)擊鼠標(biāo)右鍵,選擇最后一個(gè)Breakpoi nt Properties只有滿足了用戶設(shè)置的條件,代碼才會(huì)在G Toggle BrtakpointDi sable BreakpointCtrl+1irList.length;(dirOrFileajar, dirListi) hPath);Add.Aid Task.CanonicalPath() equalaShox Quick DiffShow Line Huntersf ftldi

3、ngPIn(skipping n 十 dirOrFnfMaddina ” + dirOrFile2iarEre建point Froperties.斷點(diǎn)的屬性界面及各個(gè)選項(xiàng)的意思如下圖,rp LFf i 一 T3MLine BreakpointIXP*L】亶 Hwnbtr164j trDir (Til*, JrOutputStr*Mt, Str i ncndk tk.ici is Irg.*valut of cndi tin chnciSusptrtd Folicy; Suspend TKreti ”2、變量斷點(diǎn) 斷點(diǎn)不僅能打在語(yǔ)句上,變量也可以接受斷點(diǎn),privat

4、e static Str IngflMZJf CMSSprivate sravic rinax inr 口甘卜嚴(yán)匕k_=&匕=上圖就是一個(gè)變量的打的斷點(diǎn),在變量的值初始化,或是變量值改變時(shí)可以停止,當(dāng)然變量斷點(diǎn)上也是可以加條件的,和上面的介紹的條件斷點(diǎn)的設(shè)置是一樣的。3、方法斷點(diǎn)方法斷點(diǎn)就是將斷點(diǎn)打在方法的入口處,puiilic voi fljarD ir(File dirOrFile2Jac, File destJar)throws ICif (dir0rFile2Jar * nul_L | | destJar nulX) hfntf nmJ T 1 lam 1 1 mniwarhlr 霽瞽

5、廠亠樸亍 i mw fl*方法斷點(diǎn)的特別之處在于它可以打在 JDK的源碼里,由于 JDK在編譯時(shí)去掉了調(diào)試信息, 所以普通斷點(diǎn)是不能打到里面的, 但是方法斷點(diǎn)卻可以, 可以通過(guò)這種方法查看方法的調(diào)用 棧。4、改變變量值代碼停在了斷點(diǎn)處,但是傳過(guò)來(lái)的值不正確,如何修改一下變量值保證代碼繼續(xù)走正確的流 程,或是說(shuō)有一個(gè)異常分支老是進(jìn)不去,能不能調(diào)試時(shí)改一下條件,看一下異常分支代碼是否正確?在Debug視圖的 Variables小窗口中,我們可以看到mDestJarName變量的值為 ”F:StudyeclipseproJarDirjarHelp.jar總 % BrtdspoinU Etpriiio

6、ns詵目g亡4*FtirWjrMtlp jar (idH aVtrrboSttr*2 iir0rFil2JwFlit G# 徹 O 4iUunit 石歸 30)、lF:udyecl二凸匚我們可以在變量上右鍵,選擇Change Value.在彈出的對(duì)話框中修改變量的值,Value miSelect Allm廠+ dirO; ; Copy VariablesCtrl+ACtrl+CCtrl+TF ; Study勵(lì) All References.All Instances. . +Ctrl+Shi t+NNew Detail Formatter. = u或是在下面的值查看窗口中修改,保用Ctr+S保

7、存后,變量值就會(huì)變成修改后的新值了。0 ErilcpointsExpressioftsNameValue:+ mBe st Jar NameF:VStudyL mKerbosetrue+ Vdir0rFil2JwFilt (id=;+Jd4StJfir”修改完成后,Ctr+S存一下Filstest. Jar Helper at loealhost: 3217IN $ Thread imam (Suspended)j J airHlp Stsp OverF66、遠(yuǎn)程調(diào)試用于調(diào)試不在本機(jī)上的程序,有兩種方式,1、本機(jī)作為客戶端2、本機(jī)作為服務(wù)端使用遠(yuǎn)程調(diào)試的前提是服務(wù)器端和客戶端的代碼是一致的本機(jī)

8、作為客戶端本機(jī)作客戶端比較常用,需要在遠(yuǎn)端的服務(wù)器上的java程序在啟動(dòng)時(shí)打開遠(yuǎn)程調(diào)試開關(guān),服務(wù)器端需要加上虛擬機(jī)參數(shù)1.5以前版本(1.5以后也可用):【-Xdebug-Xrunjdwp:tra nsport=dt_socket,server=y,address=8000】1.5及以上版本:【-age ntlib:jdwp=tra nsport=dt_socket,server=y,address=8000】F:Studyeclipseproscree nsn apjava -Xdebug-Xrunjdwp:tra nsport=dt_socket,server=y,address=8000

9、 -jarscree nsn ap3.jar連接時(shí)遠(yuǎn)程服務(wù)器時(shí),需要在Eclipse中新建一個(gè)遠(yuǎn)程調(diào)試程序Createj manage and run configurationsAttach tc* a Javi virtual machine accepting debug ccnuiecticmse filter- Eclipse Appli cation Eclipse Appli dati on Eclipse Application (1)邊;Tav Applet- F Java Appli cati on帕inNex_carifi gMr i,ticn (2) sere enUT

10、FSTestFi El B FlJll Jllni tJUni t Flug-iii T*st-i-r OS(?i Frftwcrk-I- KellotforldNew_conf i gur aticn (1)+ Bew canfi juration Him &: sere tnsnap,M Connect - Source i CommcikProject:sertensnapConnectiQn Type:Standard (Socket Attach)Ugj疸tig PrtpertiesHost: localhust珈rt: 800BAllow termini, tion of remo

11、te VMKemote Java Application1 geTtEnsngp這里有一個(gè)小地方需注意,連接上的時(shí)候貌似不能自動(dòng)切換到 Debug視圖,不要 以為本機(jī)的調(diào)試程序沒有連接到服務(wù)器端。本機(jī)作為服務(wù)端同本機(jī)作為客戶端相比,只需要修改一下“Conn ection Type*列 LonnecTLi; source: L&mmMLFrojec t:scr &ensna:pConnectiMi Type :Standard (Socket Listen)Corme.ction Properties :Fort: 6OD0Pl All &vr termination of remote VM這

12、時(shí)Eclipse會(huì)進(jìn)入到等待連接的狀態(tài)- screensnap/ src/ screeituFile Edi t Source Refactor Navi gate Search. Project Run-=:-茄 DebugE Hi erarchyEscr電色xvn魚p Remo te Java Appli eati on“ Vai ting for vm to connect nt por t SOOO.連接程序使用如下參數(shù)即可連接本機(jī)服務(wù)器,IP地址請(qǐng)用實(shí)現(xiàn)IP替換【-age ntlib:jdwp=tra nsport=dt_socket,suspe nd=y,address=127.0

13、.0.1:8000】F:Studyeclipseproscree nsn apjava-age ntlib:jdwp=tra nsport=dt_socket,suspe nd=y,address=:8000-jar scree nsn ap3.jar遠(yuǎn)程調(diào)試時(shí)本地的代碼修改可同步到遠(yuǎn)程,但不會(huì)寫到遠(yuǎn)程的文件里,也就是說(shuō)本地修改會(huì)在下次啟動(dòng)遠(yuǎn)程程序時(shí)就沒有了,不會(huì)影響到下次使用時(shí)的遠(yuǎn)程代 碼。有關(guān)遠(yuǎn)程調(diào)試更詳細(xì)點(diǎn)的介紹請(qǐng)參考 【使用Eclipse遠(yuǎn)程調(diào)試Java應(yīng)用程序】 好像漏了一個(gè)斷點(diǎn),異常斷點(diǎn),補(bǔ)一下7、異常斷點(diǎn)經(jīng)常遇見一些異常,然后程序就退出來(lái)了,要找到異常發(fā)生的地方

14、就比較難了, 還好可以打一個(gè)異常斷點(diǎn),UullFoint erEcetrt i on: caught untaught點(diǎn)這里増加一個(gè)異莒斷點(diǎn)上圖中我們?cè)黾恿艘粋€(gè) NullPoi ntException的異常斷點(diǎn),當(dāng)異常發(fā)生時(shí),代碼會(huì)停在異常發(fā)生處,定位問(wèn)題時(shí)應(yīng)該比較有幫助。8、遠(yuǎn)程調(diào)試不太了解,能詳細(xì)講講嘛?遠(yuǎn)程調(diào)試還真有用,記得有一次, 本地環(huán)境沒錯(cuò)誤,可一到測(cè)試環(huán)境就有問(wèn)題了,最后還是用戶遠(yuǎn)程調(diào)試!馬上就見效了呵呵!主要作用: 大部分問(wèn)題在開發(fā)環(huán)境已經(jīng)解決了, 可有時(shí)在生產(chǎn)環(huán)境 (當(dāng)然大部分 時(shí)候是在現(xiàn)場(chǎng)與生產(chǎn)環(huán)境幾乎一樣的測(cè)試環(huán)境上遠(yuǎn)程調(diào)試) 偏偏出現(xiàn)問(wèn)題, 通過(guò) 日志又不好找到原因或者

15、在開發(fā)環(huán)境無(wú)法重現(xiàn), 這時(shí)在遠(yuǎn)程服務(wù)器上開啟遠(yuǎn)程調(diào) 試端口,你在本地通過(guò) IP ,調(diào)試端口在本地打斷點(diǎn),當(dāng)生產(chǎn)環(huán)境執(zhí)行到你打斷 點(diǎn)的代碼時(shí), 你本地就進(jìn)入了調(diào)試, 可以查看遠(yuǎn)程代碼中的一些變量值等。 也借 此找出問(wèn)題所在。這個(gè)還真沒試過(guò), 需要對(duì)方也有 eclipse 或源碼嗎?客戶那里通常都是部署 war 包無(wú)源碼。不需要對(duì)端有源碼,也不需要對(duì)端有 Eclipse ,只要對(duì)端有部署的 java 包就好, 只需要本端有就可以了, 就像你說(shuō)的對(duì)端也是基本上不會(huì)有源碼的。 需注意對(duì)端 的 java 包中的類文件需要和本地源碼一致,不然調(diào)試時(shí)會(huì)行錯(cuò)亂。9、遠(yuǎn)程調(diào)試的端口是根據(jù)容器的開啟的端口來(lái)選擇的

16、吧?像JBoss 的端口為8787,run.bat 和 run.sh 當(dāng)中配置。答:端口是用戶自己選擇的,不管是普通應(yīng)用還是 Wet應(yīng)用,像Tomcat和JBoss 這類容器也是一樣的, 會(huì)通過(guò)文中提到的方式打開遠(yuǎn)程調(diào)試, 默認(rèn)端口的配置是 8000還是 8787并不重要,用戶可以自己修改,關(guān)鍵是兩端的端口保持一致。10、有時(shí)候,非遠(yuǎn)程調(diào)試不行。1. 不能在本機(jī)配置運(yùn)行環(huán)境,只能通過(guò)遠(yuǎn)程調(diào)試才能定位bug。2. 時(shí)間緊,沒有時(shí)間在本機(jī)配置運(yùn)行環(huán)境。打開 server 的端口,調(diào)之,改之, 替換相應(yīng)錯(cuò)誤文件就 ok。3. 懶人,不愿意配置本機(jī)開發(fā)環(huán)境,也可以遠(yuǎn)程調(diào)試。替換相應(yīng)錯(cuò)誤文件,不要重啟服

17、務(wù)器嗎?這樣不是也很麻煩? 遠(yuǎn)程調(diào)試依然可以進(jìn)行代碼的熱替換, 修改完成本地的代碼, 遠(yuǎn)程機(jī)會(huì)相應(yīng)修改, 只會(huì)修改內(nèi)存中的。11、有時(shí)候程序會(huì)這么寫: Java 代碼 return function(x,y);這時(shí)候調(diào)試想看到底返回啥了,有辦法看不? 我的做法是:增加一個(gè)臨時(shí)變量Java 代碼1. a = function(x,y);2. return a;然后斷點(diǎn)看,不過(guò)還挺麻煩的 答:這個(gè)可以選中函數(shù),右鍵,然后選 Inspect ,或使用快捷鍵 Ctrl+Shift+I12、也是關(guān)于遠(yuǎn)程調(diào)試的問(wèn)題, 就是如果打包進(jìn)行混淆了, 就無(wú)法就行遠(yuǎn)程調(diào)試 了,不知樓主有無(wú)好的解決辦法?答:遠(yuǎn)調(diào)有一個(gè)問(wèn)題就是本地代碼要和遠(yuǎn)程機(jī)上的代碼一致, 而且在編譯時(shí)需要 帶行號(hào)編譯, 不然無(wú)法找到 Class 類對(duì)應(yīng)的源代碼中的行號(hào)信息, 也

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論