做为开发人员,掌握开发环境下的调试技巧十分有必要。咱们在编写java程序的过程当中,常常会遇到各类莫名其妙的问题,为了检测程序是哪里出现问题,常常须要增长日志,看变量的值,这样调试很麻烦。假设我天天花费1小时在调试个人应用程序上的话,那累积起来的话也是很大量的时间。因为这个缘由,用这些时间来重视并了解全部使咱们调试更方便的功能。那能为你省下一些时间,也将会使你的生活更安逸、轻松。java
首先咱们须要注意三个点:不要使用System.out.println做为调试工具\使用一个日志分析器来阅读日志\启用全部组件的详细的日志记录级别web
一个关于调试的疯狂声明做为开头。但它必须是要说的!尝试切分一下你那复杂的逻辑成多个独立的单元,并编写单元测试来检测你代码的正确性。我想像以下这样的流程应该是发生得很是频繁的—-一些人经过大型web应用程序点击、填写多个表单、切换到不一样的页面、正在最后的页面上检测工个计算逻辑和实现这个调试视图中的大部分逻辑。在启动你的tomcat以前老是问你本身:有没有方法使用一个单元测试来检测这些行为?你在过去这些时间能够不知道或已忘记这些,但从如今开始,咱们将要关注一些eclipse的调试技巧,你会发现有大量的关于良好代码设计的好东西。数据库
Debug模式的界面,共分为5个区域
(1)Debug(调试)区域,显示当前正在调试代码是什么,在第多少行
(2)Variables(变量)区域,显示变量的值。
(3)代码编辑区
(4)代码结构区,显示代码中的各个方法。
(5)Console(控制台)区域。tomcat
1、条件断点eclipse
咱们一般调试断点的时候通常就是点击行号的左边,这个时候就会有断点被打起来。在debug视图中,BreakPoint View将全部断点都列出来,可是咱们能够添加一个boolean类型的条件来决定断点是否被跳过。若是条件为真,在断点处程序将中止,不然断点被跳过,程序继续执行。若是你只对应用中的某部分感兴趣的话,这个功能很是有用。例如,若是你要在第13次循环的时候检查程序,或者在一个抽象父类中调试某些功能,而你只关注其中一个具体的实现。你能够在断点视图中设置条件,或者经过代码旁边的蓝色断点标记的右键菜单(”Breakpoint Properties”)设置。你能够在条件代码片断为true的时候暂停程序,或者当代码片断的值改变的时候挂起程序。工具
断点属性中有三个选择,启用“Enable”,Hit Count和Conditional中依据咱们的须要来选择。
1)Hit Count 是指定断点处的代码段运行多少次,最典型的就是循环,若是要让一个循环执行10次就线程挂起,则指定Hit Count值为10,那么当前的循环执行到第九次的时候就会挂掉。
2)Conditional,顾名思义,就是条件判断,例如咱们须要循环变量i==10时,线程挂起,则条件设定为i==10,选择Suspend when "true"。
那若是上面的Hit Count和Conditional都选择的话,若是表达式和值设置不合理则会实效。若是选择Suspend when value changes,那么可能在Conditional在变量值发生改变的时候就挂起。单元测试
2、变量视图测试
1、变量名视图,显示当前代码行中全部能够访问的实例变量和局部变量2.显示全部的变量值3.能够经过该窗口来改变变量值 spa
若是你须要在变量视图查看一个Map对象或者List对象的值,对于eclipse的默认设置,通常并非那么容易。假设,你使用的是HashMap,你须要点击遍历各个实体条目,并面临各类HashMap的实现细节。可是,在变量视图上面有一个叫作“Show Logical Structure”的按钮。它很是有用,尤为当你的对象的toString()方法所展现的信息并不友好的时候。线程
当你须要稍微更改输入信息的时候,不须要从新开始调试会话,只需在一个表格中输入新的信息,你能够在调试阶段直接修改你的变量的值。有写时候,你能够节省一些时间,你能够经过这个功能,更加简单的模拟一些怪异的状况。
在选中的变量上使用Ctrl+Shift+d 或者 Ctrl+Shift+i能够查看变量值,另外咱们还能够在Expressions View中添加监视。
3、Display视图
你知道“Display视图”吗?你能够在调试过程当中,经过“Window” -> “Show View” -> “Display”来激活它。如今,你的eclipse应该是一个空白的新视图。你可使用这个视图,输入或者演算一些新的代码。这些代码在当前的调试位置的上下文环境中被执行,这意味着,你可使用全部变量甚至是内容助手。要执行你的代码的话,只需标记它,并使用右键菜单或者CTRL+U(执行)或者 CTRL+SHIFT+I (检查).
4、Drop to frame
Drop to frame就是说,能够从新跳到当前方法的开始处从新执行,而且全部上下文变量的值也回到那个时候。不必定是当前方法,能够点击当前调用栈中的任何一个frame跳到那里(除了最开始的那个frame)。主要用途是全部变量状态快速恢复到方法开始时候的样子从新执行一遍,便可以一遍又一遍地在那个你关注的上下文中进行屡次调试(结合改变变量值等其它功能),而不用重来一遍调试到哪里了。固然,原来执行过程当中产生的反作用是不可逆的(好比你往数据库中插入了一条记录)。
5、Step 过滤
咱们能够在Preferences中添加一个过滤器,排除指定的包。
6、进入、跳过、返回
其实这个技巧是debug最基本的知识。
F5-Step Into:移动到下一步,若是当前的行是一个方法调用,将进入这个方法的第一行。(能够经过第九条来排除)
F6-Step Over:移动到下一行。若是当前行有方法调用,这个方法将被执行完毕返回,而后到下一行。
F7-Step Return:继续执行当前方法,当当前方法执行完毕的时候,控制将转到当前方法被调用的行。
F8-移动到下一个断点处。
总之,如今基本的调试方法基本上都分享了,什么,你还没听懂,那么请打开你的eclipse进行实际操做吧!不要一味了看博文而不去实践,debug的使用源于生活也用了生活,再说一遍,如今来动手操做吧!
进入debug模式: 一、设置断点 二、启动servers端的debug模式 三、运行程序,在后台遇到断点时,进入debug调试状态