在Eclipse中使用debug(Eclipse调试常用技巧)_第1页
在Eclipse中使用debug(Eclipse调试常用技巧)_第2页
在Eclipse中使用debug(Eclipse调试常用技巧)_第3页
在Eclipse中使用debug(Eclipse调试常用技巧)_第4页
在Eclipse中使用debug(Eclipse调试常用技巧)_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Eclipse调试常用技巧发表时间:2010-04-06最后修改:2010-11-26记得刚刚毕业的时候,自己连断点也不会打,当时还在用JCreate,就连毕业设计也是用System.out找Bug的,想想真的很笨。开始工作后,一个星期过去了,在一个1、2百万行的系统中找 Bug,我依然在用 System.out,当时最痛苦的就是修改代码,每次找 到疑似Bug,就输出一下,然后重启(那时也不知道代码热替换),直到有一天带我的导 师发现了这样笨笨的调试Bug,才让我第一次认识了断点,也知道了代码修改完了可以进行热替换,我这个中国教育的半牺牲品才算向美好生活迈进了一小步。1、条件断点断点大家都比较

2、熟悉,在Eclipse Java编辑区的行头双击就会得到一个断点,代码会运行到此处时停止。条件断点,顾名思义就是一个有一定条件的断点, 运行到断点处时停止。在断点处点击鼠标右键,选择最后一个Breakpoi nt Properties只有满足了用户设置的条件,代码才会在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.断点的属性界面及各个选项的意思如下图,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、变量断点 断点不仅能打在语句上,变量也可以接受断点,privat

4、e static Str IngflMZJf CMSSprivate sravic rinax inr 口甘卜严匕k_=&匕=上图就是一个变量的打的断点,在变量的值初始化,或是变量值改变时可以停止,当然变量断点上也是可以加条件的,和上面的介绍的条件断点的设置是一样的。3、方法断点方法断点就是将断点打在方法的入口处,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*方法断点的特别之处在于它可以打在 JDK的源码里,由于 JDK在编译时去掉了调试信息, 所以普通断点是不能打到里面的, 但是方法断点却可以, 可以通过这种方法查看方法的调用 栈。4、改变变量值代码停在了断点处,但是传过来的值不正确,如何修改一下变量值保证代码继续走正确的流 程,或是说有一个异常分支老是进不去,能不能调试时改一下条件,看一下异常分支代码是否正确?在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.在弹出的对话框中修改变量的值,Value miSelect Allm厂+ dirO; ; Copy VariablesCtrl+ACtrl+CCtrl+TF ; Study励 All References.All Instances. . +Ctrl+Shi t+NNew Detail Formatter. = u或是在下面的值查看窗口中修改,保用Ctr+S保

7、存后,变量值就会变成修改后的新值了。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、远程调试用于调试不在本机上的程序,有两种方式,1、本机作为客户端2、本机作为服务端使用远程调试的前提是服务器端和客户端的代码是一致的本机

8、作为客户端本机作客户端比较常用,需要在远端的服务器上的java程序在启动时打开远程调试开关,服务器端需要加上虚拟机参数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连接时远程服务器时,需要在Eclipse中新建一个远程调试程序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这里有一个小地方需注意,连接上的时候貌似不能自动切换到 Debug视图,不要 以为本机的调试程序没有连接到服务器端。本机作为服务端同本机作为客户端相比,只需要修改一下“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、时Eclipse会进入到等待连接的状态- 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.连接程序使用如下参数即可连接本机服务器,IP地址请用实现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远程调试时本地的代码修改可同步到远程,但不会写到远程的文件里,也就是说本地修改会在下次启动远程程序时就没有了,不会影响到下次使用时的远程代 码。有关远程调试更详细点的介绍请参考 【使用Eclipse远程调试Java应用程序】 好像漏了一个断点,异常断点,补一下7、异常断点经常遇见一些异常,然后程序就退出来了,要找到异常发生的地方

14、就比较难了, 还好可以打一个异常断点,UullFoint erEcetrt i on: caught untaught点这里増加一个异莒斷点上图中我们增加了一个 NullPoi ntException的异常断点,当异常发生时,代码会停在异常发生处,定位问题时应该比较有帮助。8、远程调试不太了解,能详细讲讲嘛?远程调试还真有用,记得有一次, 本地环境没错误,可一到测试环境就有问题了,最后还是用户远程调试!马上就见效了呵呵!主要作用: 大部分问题在开发环境已经解决了, 可有时在生产环境 (当然大部分 时候是在现场与生产环境几乎一样的测试环境上远程调试) 偏偏出现问题, 通过 日志又不好找到原因或者

15、在开发环境无法重现, 这时在远程服务器上开启远程调 试端口,你在本地通过 IP ,调试端口在本地打断点,当生产环境执行到你打断 点的代码时, 你本地就进入了调试, 可以查看远程代码中的一些变量值等。 也借 此找出问题所在。这个还真没试过, 需要对方也有 eclipse 或源码吗?客户那里通常都是部署 war 包无源码。不需要对端有源码,也不需要对端有 Eclipse ,只要对端有部署的 java 包就好, 只需要本端有就可以了, 就像你说的对端也是基本上不会有源码的。 需注意对端 的 java 包中的类文件需要和本地源码一致,不然调试时会行错乱。9、远程调试的端口是根据容器的开启的端口来选择的

16、吧?像JBoss 的端口为8787,run.bat 和 run.sh 当中配置。答:端口是用户自己选择的,不管是普通应用还是 Wet应用,像Tomcat和JBoss 这类容器也是一样的, 会通过文中提到的方式打开远程调试, 默认端口的配置是 8000还是 8787并不重要,用户可以自己修改,关键是两端的端口保持一致。10、有时候,非远程调试不行。1. 不能在本机配置运行环境,只能通过远程调试才能定位bug。2. 时间紧,没有时间在本机配置运行环境。打开 server 的端口,调之,改之, 替换相应错误文件就 ok。3. 懒人,不愿意配置本机开发环境,也可以远程调试。替换相应错误文件,不要重启服

17、务器吗?这样不是也很麻烦? 远程调试依然可以进行代码的热替换, 修改完成本地的代码, 远程机会相应修改, 只会修改内存中的。11、有时候程序会这么写: Java 代码 return function(x,y);这时候调试想看到底返回啥了,有办法看不? 我的做法是:增加一个临时变量Java 代码1. a = function(x,y);2. return a;然后断点看,不过还挺麻烦的 答:这个可以选中函数,右键,然后选 Inspect ,或使用快捷键 Ctrl+Shift+I12、也是关于远程调试的问题, 就是如果打包进行混淆了, 就无法就行远程调试 了,不知楼主有无好的解决办法?答:远调有一个问题就是本地代码要和远程机上的代码一致, 而且在编译时需要 带行号编译, 不然无法找到 Class 类对应的源代码中的行号信息, 也

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论