版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、Eclipse調(diào)試常用技巧發(fā)表時間:2010-04-06最后修改:2010-11-26記得剛剛畢業(yè)的時候,自己連斷點也不會打,當時還在用JCreate,就連畢業(yè)設(shè)計也是用System.out找Bug的,想想真的很笨。開始工作后,一個星期過去了,在一個1、2百萬行的系統(tǒng)中找 Bug,我依然在用 System.out,當時最痛苦的就是修改代碼,每次找 到疑似Bug,就輸出一下,然后重啟(那時也不知道代碼熱替換),直到有一天帶我的導 師發(fā)現(xiàn)了這樣笨笨的調(diào)試Bug,才讓我第一次認識了斷點,也知道了代碼修改完了可以進行熱替換,我這個中國教育的半犧牲品才算向美好生活邁進了一小步。1、條件斷點斷點大家都比較
2、熟悉,在Eclipse Java編輯區(qū)的行頭雙擊就會得到一個斷點,代碼會運行到此處時停止。條件斷點,顧名思義就是一個有一定條件的斷點, 運行到斷點處時停止。在斷點處點擊鼠標右鍵,選擇最后一個"Breakpoi nt Properties"只有滿足了用戶設(shè)置的條件,代碼才會在G Toggle BrtakpointDi sable BreakpointCtrl+1irList.length;(dirOrFileajar, dirListi) hPath);Add.Aid Task.CanonicalPath() »equalaintIn(skipping n 十 di
3、rOrFPreferencss.Shox Quick DiffShow Line Huntersf ftldingnfMaddina ” + dirOrFile2iarEre建point Froperties.斷點的屬性界面及各個選項的意思如下圖,rp LFf i 一 T3MLine BreakpointIXP*L】亶 Hwnbtr164j trDir (Til*, J»rOutputStr*Mt, Str i n<)Br««kpint Frptrlits FtlUriM號行口就學緲霽宕滾1陳一0E&Bble Cciftdi ti (Alt+/ fo
4、r md耳 t»i sJdlrLisr.length 2Suspend vh«n:? >c«ndk tk.i»ci is ' Irg.*"valut of c«ndi ti«n ch>nc«iSusptrtd Folicy; Suspend TKreti ”2、變量斷點 斷點不僅能打在語句上,變量也可以接受斷點,private static Str IngflMZJf CMSSprivate sravic rinax inr 口甘卜嚴匕k_=£&匕=£上圖就是一個變量
5、的打的斷點,在變量的值初始化,或是變量值改變時可以停止,當然變量斷點上也是可以加條件的,和上面的介紹的條件斷點的設(shè)置是一樣的。3、方法斷點方法斷點就是將斷點打在方法的入口處,puiilic voi fljarD ir(File dirOrFile2Jac, File destJar)throws ICif (dir0rFile2Jar * nul_L | | destJar nulX) hfntf nmJ T 1 lam 1 1 mniwarhlr 霽瞽廠亠樸亍 i mw fl*方法斷點的特別之處在于它可以打在 JDK的源碼里,由于 JDK在編譯時去掉了調(diào)試信息, 所以普通斷點是不能打到里面的
6、, 但是方法斷點卻可以, 可以通過這種方法查看方法的調(diào)用 棧。4、改變變量值代碼停在了斷點處,但是傳過來的值不正確,如何修改一下變量值保證代碼繼續(xù)走正確的流 程,或是說有一個異常分支老是進不去,能不能調(diào)試時改一下條件,看一下異常分支代碼是否正確?在Debug視圖的 Variables小窗口中,我們可以看到mDestJarName變量的值為 ”F:StudyeclipseproJarDirjarHelp.jar"總 % BrtdspoinU Etpriiions詵目g亡¥4*FtirWjrMtlp jar" (idH aVtrrbo'Sttr«*2
7、 iir0rFil«2JwFlit G# 徹± O 4«iUu"nit 石歸 30)、<J一一】!>lF:udyecl二凸匚我們可以在變量上右鍵,選擇"Change Value."在彈出的對話框中修改變量的值,Value miSelect Allm廠+ dirO; ; Copy VariablesCtrl+ACtrl+CCtrl+TF ; ' Study"勵 All References.All Instances. . +Ctrl+Shi £t+NNew Detail Formatter. =
8、 u或是在下面的值查看窗口中修改,保用Ctr+S保存后,變量值就會變成修改后的新值了。0 ErilcpointsExpressioftsNameValue:+ mBe st Jar Name"F:VStudyL mKerbosetrue+ Vdir0rFil2JwFilt (id=;+Jd4StJfir”修改完成后,Ctr+S存一下Fils<1 _厶F:StudyeclipseprajarHelp.jar5、重新調(diào)試這種調(diào)試的回退不是萬能的,只能在當前線程的棧幀中回退,也就說最多只能退回到當前線 程的調(diào)用的開始處?;赝藭r,請在需要回退的線程方法上點右鍵,選擇"Drop
9、 to Frame"'V' DebugHi erarckyH3Jar Help er J ava Application>test. Jar Helper at loealhost: 3217IN $ Thread imam (Suspended)j J airHlp <er. j jrD ir Ofile J= JarKelper. j«rDir (File, Fil= 7arHelper. )ain(Striitg) 13Q» C: Frogr am Files VJavajre6binj,Lj Copy StackFini.Ctr
10、l+CCtrl+F訂CommentDelete. javia.JarHelper. jai卜!Z JarDir 卜src 品test 毎加ZX4Tc FrmeJ.Step Iftto!;3>Stsp OverF66、遠程調(diào)試用于調(diào)試不在本機上的程序,有兩種方式,1、本機作為客戶端2、本機作為服務(wù)端使用遠程調(diào)試的前提是服務(wù)器端和客戶端的代碼是一致的本機作為客戶端本機作客戶端比較常用,需要在遠端的服務(wù)器上的java程序在啟動時打開遠程調(diào)試開關(guān),服務(wù)器端需要加上虛擬機參數(shù)1.5以前版本(1.5以后也可用):【-Xdebug-Xrunjdwp:tra nsport=dt_socket,serve
11、r=y,address=8000】1.5及以上版本:【-age ntlib:jdwp=tra nsport=dt_socket,server=y,address=8000】F:Studyeclipseproscree nsn ap>java -Xdebug-Xrunjdwp:tra nsport=dt_socket,server=y,address=8000 -jarscree nsn ap3.jar連接時遠程服務(wù)器時,需要在Eclipse中新建一個遠程調(diào)試程序Createj manage and run configurationsAttach tc* a Javi virtual m
12、achine 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 enUTFSTestFi El B FlJll Jllni tJUni t Flug-iii T*st-i-r OS(?i Frftwcrk-I- KellotforldNew_conf i gur aticn (1)+ Bew c
13、anfi juration Him &: sere tnsnap,M Connect - Source i CommcikProject:sertensnapConnectiQn Type:Standard (Socket Attach)Ugj疸tig PrtpertiesHost: localhust珈rt: 800BAllow termini, tion of remote VMKemote Java Application1 geTtEnsngp這里有一個小地方需注意,連接上的時候貌似不能自動切換到 Debug視圖,不要 以為本機的調(diào)試程序沒有連接到服務(wù)器端。本機作為服務(wù)端同本機
14、作為客戶端相比,只需要修改一下“Conn ection Type*列 LonnecTLi; source: L&mmMLFrojec t:scr &ensna:pConnectiMi Type :Standard (Socket Listen)Corme.ction Propertie's :Fort: 6OD0Pl All &vr termination of remote VM這時Eclipse會進入到等待連接的狀態(tài)- screensnap/ src/ screeituFile Edi t Source Refactor Navi gate Search.
15、Project Run-=:-茄 DebugE Hi erarchyEscr電色xv£n魚p Remo te Java Appli eati on“ Vai ting for vm to connect nt por t SOOO.連接程序使用如下參數(shù)即可連接本機服務(wù)器,IP地址請用實現(xiàn)IP替換【-age ntlib:jdwp=tra nsport=dt_socket,suspe nd=y,address=127.0.0.1:8000】F:Studyeclipseproscree nsn ap>java-age ntlib:jdwp=tra nsport=dt_socket,s
16、uspe nd=y,address=127.0.0.1:8000-jar scree nsn ap3.jar遠程調(diào)試時本地的代碼修改可同步到遠程,但不會寫到遠程的文件里,也就是說本地修改會在下次啟動遠程程序時就沒有了,不會影響到下次使用時的遠程代 碼。有關(guān)遠程調(diào)試更詳細點的介紹請參考 【使用Eclipse遠程調(diào)試Java應(yīng)用程序】 好像漏了一個斷點,異常斷點,補一下7、異常斷點經(jīng)常遇見一些異常,然后程序就退出來了,要找到異常發(fā)生的地方就比較難了, 還好可以打一個異常斷點,UullFoint erEcetrt i on: caught untaught點這里増加一個異莒斷點上圖中我們增加了一個
17、NullPoi ntException的異常斷點,當異常發(fā)生時,代碼會停在異常發(fā)生處,定位問題時應(yīng)該比較有幫助。8、遠程調(diào)試不太了解,能詳細講講嘛?遠程調(diào)試還真有用,記得有一次, 本地環(huán)境沒錯誤,可一到測試環(huán)境就有問題了,最后還是用戶遠程調(diào)試!馬上就見效了呵呵!主要作用: 大部分問題在開發(fā)環(huán)境已經(jīng)解決了, 可有時在生產(chǎn)環(huán)境 (當然大部分 時候是在現(xiàn)場與生產(chǎn)環(huán)境幾乎一樣的測試環(huán)境上遠程調(diào)試) 偏偏出現(xiàn)問題, 通過 日志又不好找到原因或者在開發(fā)環(huán)境無法重現(xiàn), 這時在遠程服務(wù)器上開啟遠程調(diào) 試端口,你在本地通過 IP ,調(diào)試端口在本地打斷點,當生產(chǎn)環(huán)境執(zhí)行到你打斷 點的代碼時, 你本地就進入了調(diào)試,
18、 可以查看遠程代碼中的一些變量值等。 也借 此找出問題所在。這個還真沒試過, 需要對方也有 eclipse 或源碼嗎?客戶那里通常都是部署 war 包無源碼。不需要對端有源碼,也不需要對端有 Eclipse ,只要對端有部署的 java 包就好, 只需要本端有就可以了, 就像你說的對端也是基本上不會有源碼的。 需注意對端 的 java 包中的類文件需要和本地源碼一致,不然調(diào)試時會行錯亂。9、遠程調(diào)試的端口是根據(jù)容器的開啟的端口來選擇的吧?像JBoss 的端口為8787,run.bat 和 run.sh 當中配置。答:端口是用戶自己選擇的,不管是普通應(yīng)用還是 Wet應(yīng)用,像Tomcat和JBoss 這類容器也是一樣的, 會通過文中提到的方式打開遠程調(diào)試, 默認端口的配置是 8000還是 8787并不重要,用戶可以自己修改,關(guān)鍵是兩端的端口保持一致。10、有時候,非遠程調(diào)試不行。1. 不能在本機配置運行環(huán)境,只能通過遠程調(diào)試才能定位bug。2. 時間緊,沒有時間在本機配置運行環(huán)境。打開 server 的端口,調(diào)之,改之, 替換相應(yīng)錯誤文件就 ok。3. 懶人,不愿意配置本機開發(fā)環(huán)境,也可以遠程調(diào)試。替換相應(yīng)錯誤文件,不要重啟服務(wù)器嗎?這樣不是也很麻煩?
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024高端汽車租賃服務(wù)詳細協(xié)議
- 2024導演合作拍攝協(xié)議細則
- 董事長的具體職責職能模板范文5篇
- 2024年度環(huán)保垃圾清運服務(wù)協(xié)議模板
- 2024年個人合伙權(quán)益股份轉(zhuǎn)讓協(xié)議
- 安檢服務(wù)人員2024勞動協(xié)議樣本
- 2024年建筑項目安全保證協(xié)議
- 文書模板-《合伙銷售白酒合同》
- 2024年教育培訓業(yè)務(wù)合作協(xié)議
- 2024年度車輛租賃化三方協(xié)議
- 婦產(chǎn)科學課件:胎心監(jiān)測
- 新蘇教版科學四年級上冊學生活動手冊習題與講解
- 基礎(chǔ)護理質(zhì)量標準及考核評分表
- 商務(wù)條款響應(yīng)表
- 二年級上冊美術(shù)教案-7. 去遠航 -冀教版
- 二年級上冊語文課件-10《日月潭》|人教(部編版) (共19張PPT)
- 《詩情畫意》教學設(shè)計
- 中華文化與傳播教材課件
- Unit3 Sports and Fitness Reading for writing健康生活講義-高中英語人教版(2019)必修第三冊
- Unit 4 Viewing Workshop 課件-高中英語北師大版(2019)選擇性必修第二冊
- 血尿尿頻尿急尿痛課件
評論
0/150
提交評論