文档章节

eclipse调试java程序的九个技巧

lyg945
 lyg945
发布于 2014/06/23 11:48
字数 1543
阅读 560
收藏 22

九个技巧:

  1. 逻辑结构

  2. 条件debug

  3. 异常断点

  4. 单步过滤

  5. 跳到帧

  6. Inspect

  7. expressions

  8. display

  9. 远程debug

 

  最早开始用eclipse的debug的时候,只会F5 F6 F7 F8,甚至F7都不是很搞的明白是怎么用的,那时候资浅,碰不到需要复杂debug的代码,慢慢工作深入了,场景碰多了,就需要各种debug技巧来提升定位bug效率,以前找人帮忙排查问题,看他开各种窗口debug各种溜甚是羡慕嫉妒恨,慢慢久病成医自己也用溜了eclipse的一些主要的debug技巧。稍作整理分享出来。

  F5678这四个基本技能就略过不说了,但是最基本的技能能解决90%问题,所以虽然略过不说 ,但是必须用的很溜,相信园友达人们这四个肯定比我用的溜的多。

1. 逻辑结构

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

这个按钮就是展示逻辑结构的按钮,下面两个图,上图是不展示逻辑结构,下图是展示逻辑结构,很明显,下图的结构可读性更强,可以专注于debug的变量。

 

2. 条件debug

条件debug用在需要满足某种条件才会触发断点的场景,比如只有id是12345这条记录会有问题,那就当id等于12345时才触发断点,其他都放过。

右击断点选择断点属性,就能看到这样一个配置框,右边的文本区块可以填写条件代码,比如id==12345,由于每次都要做这个判断,如果循环数很大的话,还是有点点慢的,你可以去上个厕所接个水啊什么的,还是很方便的。

 

 

3. 异常断点

异常断点只要用在debug某种异常的时候,可以配置当这个异常出现后才触发断点,不需要debug去寻找异常。

点击这个红圈就能弹出异常断点的窗口,会列出你系统里的所有异常类,然后选择需要断点的异常就OK。

 

 

4. 单步过滤

单步过滤的场景是我们在使用F5来跟到某个方法内部的时候,经常会跟到一些我们确定不需要看的方法内部。

this.getTradeDetail(uid, itemStr.subString(0,5))

比如这行代码,想F5进入getTradeDetail内部,会首先执行itemStr.subString方法,会先进入subString方法,而这方法是jdk的String方法,确定没问题,不需要关心,单步过滤就是跳过这些我们想忽略的方法直接到目标方法内部的一种debug技巧。

Window > PreferencesJava > Debug > Step Filtering 设置过滤器, 可以选择需要过滤掉的包和类。同时要确保你在debug视图中启用了单步过滤,如下图。这样在使用单步调试的时候,就会使用到这个过滤功能。

上图是过滤器配置,典型的就是把jdk的一些类和包配置过滤。下图是要在debug时候开启单步过滤,否则不生效。

 

 

 

 

5. 跳到帧

跳到帧是一种重入技巧,在debug时,eclipse可以直接跳到调用栈中指定的任意桢,并且使JVM在此处重新运行。这使你可以重新运行你的部分代码,而不需要为了调试之前的代码而重新来一次。

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

使用方式:选择调用栈中的一桢,点击按钮“跳到桢”

6. Inspect

inspect用来查看某个表达式的之,对于变量值debug很容查看,但是对于一个表达式的值就不容易查看,还是这句:

this.getTradeDetail(uid, itemStr.subString(0,5))

想看getTradeDetail的值,就没法想看变量值一样(虽然这个很有可能是赋值给一个变量...),要看这种表达式值,就需要inspect,具体做法是选中这行表达式,然后右击->inspect,或者更方便的快捷键组合:ctrl+shift+i,会弹出如下的展示表达式结果的框:

7. expressions

expressions窗口也是用来看变量或者表达式的值的,在windows->show viewz中打开expression窗口,然后在里面添加你想观察的表达式,比如还是这句:

this.getTradeDetail(uid, itemStr.subString(0,5))

然后debug的时候,就能看到被添加的表达式结果了,另外也能根据需要改value的值。

8. display

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

 

9. 远程debug

远程debug可以用来调试远程服务器上的代码,保证你本地代码和远程部署的代码是一致,就可以通过这种方式debug服务器代码,这个是java web开发的一大利器,否则定位服务器问题简直是灾难。

远程debug需要服务器端启动jvm的时候做一些开启和端口的配置,具体的配置网上很多,搜一下即可。然后在本地的debug configuration中双击添加一个remote java application,填写远程主机的host和配置的debug端口,就可以开始debug了,如下图:

我平时用到的主要就是这些了,如果有其他的feature,欢迎大家补充。


© 著作权归作者所有

lyg945

lyg945

粉丝 39
博文 28
码字总数 15849
作品 0
上海
后端工程师
私信 提问
加载中

评论(1)

u
uubirds
浅显易懂、受益匪浅!
eclipse远程debug,java项目

首先java项目要支付可远程调试得到启动时加入参数 启动远程调试 启用JMX,远程性能观察 eclipse配置 其中:host为远程java程序提供远程调试的IP,post为远程java程序提供远程调试的端口 使用 ...

有事没事
2014/12/05
1K
0
Eclipse 调试器:零距离接触实战技巧

调试的方法虽然千千万万,但归根结底,就是找到引发错误的代码。Eclipse调试器的目标是让程序员能对本地或远程程序进行错误侦测与诊断。 调试的方法虽然千千万万,但归根结底,就是找到引发错...

李长春
2011/12/23
308
0
Eclipse 远程调试 Java 程序

今天同事问我怎么远程调试 java 程序。我不会,那马上搜索看看。在被高度的程序中加个数据就行。然后 eclipse 调试时指定端口就行,太方便了。 比如,现在有一个代码: 把这个java 导出为 re...

鉴客
2010/08/05
1.7K
1
使用 Eclipse 平台进行调试

调试是程序员无法回避的工作。调试方法有许多种,但归根结底,就是找到引发错误的代码。举例来说,在 Linux 应用程序中,分段故障被认为是最常见的错误之一。当程序尝试访问未分配给它的内存...

红薯
2010/01/12
1.5K
0
eclipse断点调试常用技巧

1、 条件断点 断点大家都比较熟悉,在Eclipse Java 编辑区的行头双击就会得到一个断点,代码会运行到此处时停止。 条件断点,顾名思义就是一个有一定条件的断点,只有满足了用户设置的条件,...

王阔
2012/06/11
1.2K
0

没有更多内容

加载失败,请刷新页面

加载更多

记录一题生产者消费者问题

//有一个容器,能存储一定的产品,有put和get方法,有两个生产者,8个消费者的线程阻塞 import java.util.LinkedList; import java.util.concurrent.TimeUnit; public class Test3<T> { Lin...

南桥北木
28分钟前
13
0
线程池源码解读——回归基础

线程池源码解读——回归基础 线程池源码解读——回归基础 线程池的好处: JDK提供的创建线程池: java 中创建线程的方式: 线程池源码解读: 记录的知识点: 线程池的好处: 降低资源的开销 ...

lihua20103181
30分钟前
70
0
2D游戏开发课程学习笔记(6)-pygame小游戏开发

游戏简介 使用pycharm开发的小游戏《嗷大喵快跑》。是一款比较简单的酷跑游戏,只有5关。 玩法介绍 按空格键控制可以让猫跳跃,要同时躲避子弹和恶龙的袭击。 结束以后会有高分榜。 游戏预览...

pl彭莉
33分钟前
41
0
pygame制作小游戏——魔塔大闯关

pygame制作小游戏——魔塔大闯关 开发工具:vscode 游戏介绍:一开始玩家有100的生命值,10的攻击力,10的防御力,玩家可以通过获得相应颜色的钥匙来打开相应颜色门,玩家可开挂一次,通过点...

JulYi
35分钟前
8
0
垃圾回收:可达性分析算法、生存还是死亡(两次标记)

判断哪些内存需要回收 引用计数算法、可达性分析算法。引用计数算法优点实现简单,但是无法判断循环引用。 可达性分析算法:通过一系列的GC ROOTS作为起点,往下搜索,所走过的路径叫引用链。...

mrsuperli
37分钟前
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部