java程序员最好的debug教学

说明

本文参考了网上一些debug的教程,又在本身实践的基础上增长和改进了不少技巧.以上全部教程都是在debug视图中,请注意!java

条件断点

若是你不知道如何添加断点,只需点击左边面板(行号前面)断点即被建立。在调试界面中,“断点”视图会把全部被建立的断点列出来。咱们能够给它加一个布尔条件,而后按Ctrl+s保存断点,该断点会被激活而且若是布尔条件为真,就会执行该断点,不然将会跳过往下执行。web

clipboard.png

异常断点

在断点视图中,有一个J!标记按钮!咱们可使用该按钮来添加一个Java异常断点。例如,咱们想让程序在遇到空指针异常(NullPointerException)时进入断点,那么咱们可使用该按钮来添加一个异常断点!.数据库

  • 异常断点特别适合调试程序的异常,迅速找到异常抛出的位置express

clipboard.png

监视点

这是一个很是好的功能,当选定的属性访问或修改程序时,程序会中止执行并容许进行调试。在Outline视图中选择一个 类变量 右键选择监视点,属性监视点将会被建立,在断点(Breakpoints)视图中会把全部监视点用列表的形式显示出来。windows

clipboard.png

clipboard.png

expressions/表达式

按Ctrl+Shift+D或者Ctrl+Shift+I来显示选定变量或者表达式的值。咱们也能够给一个变量或表达式添加永久观察点,当程序在调试时,这些观察点就会在表达式视图(Expression view)中显示出来。服务器

clipboard.png

修改变量值

在调试过程当中,咱们能够修改变量值。先选好一个变量而后进入变量视图(Variables view),根据变量类型在其对应的Value列里输入值便可.数据结构

  • 注意:这里只能修改基本类型和String,集合类的还不能直接输入修改app

clipboard.png

在Main函数里面中止执行

在运行/调试设置中,编辑配置对话框中有“Main”这个选项卡,咱们能够勾选“Stop in main”这个复选框。若是选中,那么在调试一个基于main方法的Java程序时,程序会在main方法第一行位置便中止执行。
main框架

环境变量

并非在系统属性中添加环境变量,咱们能够在编辑配置对话框中很方便地进行添加。
clipboard.pngeclipse

 Drop to Frame

这也是我最喜欢的一个功能。调试期间,能够从新跳到调用堆栈框架的开始处执行,而且变量值也会回到最初。根据回档调整堆栈的深度,这个功能的主要用途是全部变量状态能够快速回到方法开始执行时候的样子,而后你能够从新进行一遍一遍执行,这样就能够在你关注的地方进行屡次调试,可是在执行过程当中也会产生一些反作用,好比插入到数据库里面的数据是没法删除的!

clipboard.png

单步过滤

当咱们进入(F5)方法的时候,常常会进入jdk自带的源码中,咱们可能不须要这个库,就能够在Perference选项卡页面添加一个过滤器来排除这个包。

clipboard.png

进入、跳出和返回

我把这个放在最后一点,在调试过程当中,这些是必需要了解(最好掌握)的东西:

  1. F5——进入:移动到下一个步骤,若是当前行有一个方法调用,该控件将会跳转到被调用方法的第一行执行。

  2. F6——跳出:移动到下一行。若是在当前行有方法调用,那么会直接移动到下一行执行。不会进入被调用方法体里面。

  3. F7——返回:从当前方法中跳出,继续往下执行。

  4. F8——移动到下一个断点处执行。

debug时变量太长显示省略号

在debug界面中,右击variable下面的空白,选择maxLength,把10000改为0,0表明没有限制

clipboard.png

clipboard.png

远程debug

远程debug能够用来调试远程服务器上的代码,保证你本地代码和远程部署的代码是一致,就能够经过这种方式debug服务器代码,这个是java web开发的一大利器,不然定位服务器问题简直是灾难。远程debug须要服务器端启动jvm的时候作一些开启和端口的配置,具体的配置网上不少,搜一下便可。而后在本地的debug configuration中双击添加一个remote java application,填写远程主机的host和配置的debug端口,就能够开始debug了,以下图

clipboard.png

跳到帧

跳到帧是一种重入技巧,在debug时,eclipse能够直接跳到调用栈中指定的任意桢,而且使JVM在此处从新运行。这使你能够从新运行你的部分代码,而不须要为了调试以前的代码而从新来一次。使用方式:选择调用栈中的一桢,点击按钮“跳到桢”

  • 要注意的是:已经被修改的变量不会被重置,它们会保留当时的值。

clipboard.png

Inspect

inspect用来查看某个表达式的之,对于变量值debug很容查看,可是对于一个表达式的值就不容易查看,仍是这句:this.getTradeDetail(uid, itemStr.subString(0,5))
想看getTradeDetail的值,就无法想看变量值同样(虽然这个颇有多是赋值给一个变量...),要看这种表达式值,就须要inspect,具体作法是选中这行表达式,而后右击->inspect,或者更方便的快捷键组合:ctrl+shift+i,会弹出以下的展现表达式结果的框:

图片描述

display

display也是用来观察和修改变量or表达式的,这个应该用的人比较多,在windows->show viewz中打开display窗口,能够在display窗口里写表达式,而后右击选择display运行查看结果或者ctrl+shift+D快捷键组合,表达式能够是程序中一行代码或者你本身写的一个赋值语句来改变变量值之类的。

clipboard.png

 逻辑结构

主要用来展现map之类的collection数据结构存储的值的,它只展现存储值的逻辑部分,而屏蔽了数据结构详细的内部结构,更方便咱们查看map之类collection结构里存储的值

clipboard.png
clipboard.png

debug时修改map/list/对象的值

在variables上找到修改的变量,有两种方式进行修改值
1.修改list中"aaaa"的值.如图
clipboard.png

第一个方法,在aaaa的地方修改必须使用return,好比 return "aabbcc" 按ctrl+s进行保存
第二个方法,右击[2]的位置,选择change value,在弹出框中输入return "aabbcc"按ctrl+s进行保存,操做如图:

clipboard.png

2.debug时修改map的值如图:

clipboard.png

第一个方法和list的相似.若是要修改"111"的值的话,不能用return了,必须使用map的方法进行赋值.map.put("aaa","ccccc")按ctrl+s进行保存
第二个方法右击选择change value,在弹出框中输入map.put("aaa","ccccc")按ctrl+s进行保存

3.对象的修改,能够直接修改的直接在下面修改,保存便可.不能修改的就用java表达式进行修改

debug源码,

若是项目工程直接有依赖,能够直接debug到工程源码,而不用在class文件上调试,以下图,NCWEbpub依赖web_webapnew,在debug里配置source把web_webapnew工程加进来

clipboard.png

相关文章
相关标签/搜索