debug调试

今天浏览csdn,发现一文详细的描述了Eclipse Debug中的各个知识点,很是详尽!特此记录。

Eclipse Debug鲜为人知的秘密

http://blog.csdn.net/mgoann/article/details/7239492

Debug视图

认识debug视图,红色部分框为线程堆栈视图,黄色部分框为表达式、断点、变量视图,蓝色部分为代码视图。java


 线程堆栈视图

分别介绍一下这几个按钮的含义:linux

1.表示当前实现继续运行直到下一个断点,快捷键为F8。程序员

2.表示打断整个进程socket

3.表示进入当前方法,快捷键为F5。工具

4.表示运行下一行代码,快捷键为F6。测试

5.表示退出当前方法,返回到调用层,快捷键为F7。spa

6.表示当前线程的堆栈,从中能够看出在运行哪些代码,而且整个调用过程,以及代码行号操作系统



 

变量视图

1.为变量名视图,显示当前代码行中全部能够访问的实例变量和局部变量.net

2.显示全部的变量值插件

3.能够经过该窗口来改变变量值



 

断点视图

1.显示全部断点

2. 将当前窗口1中选中的端口失效,再次点击启用。

3.异常断点



 

表达式视图

表达式视图:表达式视图是Debug过程当中较为经常使用的一个视图,能够对本身的感兴趣的一些变量进行观察,也能够增长一些本身的表达式,也能够查看一行代码的运行结果。

1.表达式

2. 点击此能够新增一个表达式



 

代码视图

代码视图:用来显示具体的代码。其中绿色部分是指当前将要执行的代码



 

 

场景一:小明辛苦了两天终于将本身的负责的任务完成了,次日转测后,测试找到了小明说,小明的程序有bug,能够是小明通过仔细调试,发现本地没有任何问题,可是测试的环境上确实有问题,因此小明遇到了难题,测试的环境linux,又不能上去linux去debug,小明这个时候想要是Linux也能够debug就行了.

远程debug

远程debug:远程debug顾名思义,可以将远程操做系统上的任何java进行debug,可是有前提是本地须要有同步的代码。

1.远程debug的步骤是在远程操做系统上启动java进程时增长特殊的

-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=$DEBUG_PORT,server=y,suspend=n

2.在Eclipse中新建一个Remote Java Application

远程debug

1.打开Debug Configurations视图

2.右击Remote Java Application,

New

3.选择源码工程

4.输入远程IP和端口,端口即服务

端的$DEBUG_PORT,点击OK。


  

场景一:小明写了一个任务执行者,该执行者不间断的执行一些任务,在现网上运行了一段时间后,发现有几率的出现一些故障,发现运行一段时间后,该任务者异常退出了,退出的由于是空指针,能够小明想要在本地debug,不知道断点打在哪里,该问题是几率事件,不必定会出现,因此小明debug几遍下来后,头晕眼花,连代码都看不清楚了,小明想要是能有个断点每当出现空指针异常的时候就停下来让他发现问题,那该多好呀。

异常断点

异常断点:在定位问题的过程当中,经常会遇到断点没法打到合适的位置,以致于和问题的触发点千差万别,因此这个时候不妨试试异常断点,顾名思义,异常断点是指抛出某种异常后自动挂起的断点。

点击红色部位,增长一个异常断点



 

输入想要定位的异常类型,例如NullPointerException,这样系统中抛出任何NullPointerException异常后,都会挂起当前线程,给你机会去定位问题。

 

场景一:小明写了一个巨大的循环,在调测代码时,小明发现每当循环到第100000次的时候,就是出现问题,没有达到本身的预期,因而小明在循环里打了个断点,想看看到底怎么回事,可小明万万没有想到,想要到达100000次循环是多么的困难,小明这个时候已经开始浮想联翩,若是能有这样的断点:

             If 循环次数== 100000,线程停下来

条件断点

如右图,循环1000次,若是想要在循环到500

次的时候停下来,能够建立一个条件断点,右

击断点悬着Breakpoint Properties。



 

选中Enable Condition

在空白处,添加你本身的条件,若是条件返回true,线程会被挂起,若是为false,则忽略该异常

Hit Count为该断点通过多少次后,正式挂起线程,若是设置为500,则表达前499次,通过该断点都不会停下,当第500次,该断点会挂起当前线程。

 

 表达式

表达式能够查看一些在当前代码中没有的命令行,方便定位问题。

 

场景一:小明最近遇到一个难题,在调用一个第三方插件时老是会有问题,小明怀疑是第三方插件的bug,但小明没有找到源码不能进行debug,小明该怎么办呢?

Debug定位第三方插件的问题

1.使用反编译工具将代码反编译

2.将反编译后的源码进行过滤

3.修复源码编译错误

4.进行debug

Debug一些经验

1.尽可能减小debug,少用debug,优秀的程序员老是花80%的时间来思考如何解决问题,20%的时间来动手完成代码,而糟糕的程序员老是用20%的时间去写代码,80%的时间去调试代码,动手以前尽可能想好如何去作,而且已经为你本身的思路作了充分的实验。

2.尽量的提升debug的效率,设置合适的断点,使用快捷键。

3.debug的F6快捷键常常用到,它与金山词霸的快捷键冲突,因此在debug的时候最好将金山词霸关掉。

4.debug的表达式是可执行代码,将会对代码结果产生永久性影响,在调试时注意,常常将不用的表达式清除掉。

相关文章
相关标签/搜索