? 正所谓“工欲善其事必先利其器",会用Eclipse去调试可以帮助识别和解决应用程序缺陷,同时也可以帮助我们去阅读和理解一些源码是有极大的帮助的。可以极大的提高我们的工作效率。?
1.基础知识,熟悉Debug视图
认识debug视图,红色部分框为线程堆栈视图,黄色部分框为表达式、断点、变量视图,蓝色部分为代码视图。
线程堆栈视图
分别介绍一下这几个按钮的含义:
1.表示当前实现继续运行直到下一个断点,快捷键为F8。
2.表示打断整个进程
3.表示进入当前方法,快捷键为F5。
4.表示运行下一行代码,快捷键为F6。
5.表示退出当前方法,返回到调用层,快捷键为F7。
6.表示当前线程的堆栈,从中可以看出在运行哪些代码,并且整个调用过程,以及代码行号
变量视图
1.为变量名视图,显示当前代码行中所有可以访问的实例变量和局部变量
2.显示所有的变量值
3.可以通过该窗口来改变变量值
断点视图
1.显示所有断点
2. 将当前窗口1中选中的端口失效(你可以发现你自己的窗口上的断点全部被打上了斜杠),再次点击启用。
3.异常断点
表达式视图
表达式视图:表达式视图是Debug过程中较为常用的一个视图,可以对自己的感兴趣的一些变量进行观察,也可以增加一些自己的表达式,也可以查看一行代码的运行结果。
1.表达式
2. 点击此可以新增一个表达式
代码视图
代码视图:用来显示具体的代码。其中绿色部分是指当前将要执行的代码
2. 一些非常有用的调试的小方法
2.1Drop to Frame -回退到该函数的开头位置
这个可以重新跳到调用堆栈框架的开始处执行,并且变量值也会回到最初。根据回档调整堆栈的深度,这个功能的主要用途是所有变量状态可以快速回到方法开始执行时候的样子,然后你可以重新进行一遍一遍执行,这样就可以在你关注的地方进行多次调试,但是在执行过程中也会产生一些副作用,比如插入到数据库里面的数据是无法删除的!
2.2改变变量的值
在调试过程中,我们可以修改变量值。先选好一个变量然后进入变量视图(Variables view),根据变量类型在其对应的Value列里输入值即可。
2.3条件断点
条件断点,顾名思义就是一个有一定条件的断点,只有满足了用户设置的条件,代码才会在运行到断点处时停止。
在断点处点击鼠标右键,选择最后一个"Breakpoint Properties"
断点的属性界面及各个选项的意思如下图,
2.4 异常断点
经常遇见一些异常,然后程序就退出来了,要找到异常发生的地方就比较难了,还好可以打一个异常断点,
上图中我们增加了一个NullPointException的异常断点,当异常发生时,代码会停在异常发生处,定位问题时应该比较有帮助。
2.5单步过滤
单步过滤的场景是我们在使用F5来跟到某个方法内部的时候,经常会跟到一些我们确定不需要看的方法内部。
this.getTradeDetail(uid, itemStr.subString(0,5))
比如这行代码,想F5进入getTradeDetail内部,会首先执行itemStr.subString方法,会先进入subString方法,而这方法是jdk的String方法,确定没问题,不需要关心,单步过滤就是跳过这些我们想忽略的方法直接到目标方法内部的一种debug技巧。
在Window > PreferencesJava > Debug > Step Filtering 设置过滤器, 可以选择需要过滤掉的包和类。同时要确保你在debug视图中启用了单步过滤,如下图。这样在使用单步调试的时候,就会使用到这个过滤功能。
下图是过滤器配置,典型的就是把jdk的一些类和包配置过滤。下图是要在debug时候开启单步过滤,否则不生效。
开启单步过滤
这些调试的小方法在我们的调试项目的时候的确可以给我们很大的帮助,一定要学会。
3 远程调试
这中调试方式在我们的实际工作开发中用的非常多,特别是我们的Java web 开发里面,我们的程序要跑在linux下面,但是我们写代码,测试,一般在windows下,但是我们想远程的调试服务器上的代码,特别是出了bug,我们在本地是没有问题,但是测试环境里面一直有问题。
远程debug:远程debug顾名思义,能够将远程操作系统上的任何java进行debug,但是有前提是本地需要有同步的代码。
3.1 eclipse远程调试linux下tomcat
看到很多人,设置这,设置那个,其实不用那么麻烦的,因为tomcat服务器已经内置了JPDA支持(Java的JPDA远程调试程序,JPDA是JDK自带的远程调试机制)?
在linux下的操作:
1.先停止tomcat
2.让tomcat以可以远程调试的方法运行。
进入tomcat的bin目录,执行如下命令
catalina.sh jpda start
在windows下的操作
1.打开Debug Configurations视图
2.右击Remote Java Application,
New
3.选择源码工程
4.输入远程IP和端口,端口即服务端的$DEBUG_PORT,点击OK。
3.2 当我们的远程连接debug的时候,可能会报如下错误:
原因是我们已经有一个远程连接了,我们进入debug视图将其关掉即可
1.打开Debug视图,Window----Open Perspective----Debug,即可打开debug视图
2.关闭这个远程连接
点击如下按钮,即可关闭远程调试连接了
至此,基本的Eclipse调试技巧讲完了!