BaNg@taobao

Just Do It!

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  20 Posts :: -1 Stories :: 202 Comments :: 0 Trackbacks
调试其实是门很深的学问,在分析Eclipse源代码的过程中积累了很多经验,但大多与多数人无用,现介绍一个简单而非常有用的调试功能及它的适用场合。

首先看一段代码:

 1 
 2 public class Simple {
 3     public static void main(String[] args) {
 4         int max = 10;
 5         for(int i = 0; i < max ; i++)
 6         {
 7             simpleAction(i);
 8         }
 9     }
10     
11     private static void simpleAction(int i) {
12         int tmp = i;
13         if (i == 5)
14             throw new NullPointerException("5 is invalid number!");
15         System.out.println("Number "+tmp+" reached!");
16     }
17 }
18
这段代码非常简单,就是打印10个数字,但中间一个出了异常,假设我们忘记Eclipse的Exception BreakPoint(在复杂的场合,不一定抛Exception),于是看到控制台除了异常信息之后,我们可在第7行和第12行设置断点,看调用i到底发生了什么。

启动调试后一切正常,除了你必须F8 4次,因为0-4正常,但也在断点处,很烦人。有没有可能激活断点一次呢?当然可以。

从控制台看到5 is invalid number,那么这次调试只针对5,我们可以简单的设置一下:

第一步:



第二步在出现的对话框内,选中Enable Condition,接着输入我们的condition: i==5



OK,再调试启动Simple,发现断点激活是在i=5的时候,我们就可以F6一步一步看到底发生了什么。

这种条件调试在使用复杂的框架的时候极其有用,举个例子:
GMF的AbstractActionHandler有N多子类,你必须直接或间接的继承它,同时使用它的API,在它的API很复杂而我还在探索
的情况下,出错在所难免,出错后在AbstractActionHandler的某个API里设置了一断点,但你只想关心自己写的子类,否则按F8超过1分钟,那么我们可以在上面的condition text里面输入:

this.getClass().getName().equals("foo.bar.MyDiagramAction")

就可以省掉很多麻烦。

当然condition可以写的很复杂,可以针对断点的context写任意Java代码。



posted on 2008-07-22 23:10 Always BaNg. 阅读(1937) 评论(12)  编辑  收藏 所属分类: JavaEclipse

Feedback

# re: 或许你不知道的一个调试功能 2008-07-22 23:39 隔叶黄莺
呵呵,我经常用这个功能的。  回复  更多评论
  

# re: 或许你不知道的一个调试功能 2008-07-22 23:40 隔叶黄莺
为什么你的日志在 blogjava.net 首页面会显示

Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ -->&nb...

呢?  回复  更多评论
  

# re: 或许你不知道的一个调试功能 2008-07-22 23:51 4980
很不错,下次试试  回复  更多评论
  

# re: 或许你不知道的一个调试功能 2008-07-23 08:42 andy 林
哈哈 看来我土了 我第一次看到  回复  更多评论
  

# re: 或许你不知道的一个调试功能 2008-07-23 08:59 Always BaNg.
@隔叶黄莺
估计是注释截取导致的

<!-- xxxxx

后面的被劫了所以能看到。  回复  更多评论
  

# re: 或许你不知道的一个调试功能 2008-07-23 09:00 raof01
老土~~“远古”时代就有条件断点功能了。  回复  更多评论
  

# re: 或许你不知道的一个调试功能 2008-07-23 09:10 bigbigbig
感谢楼主,非常的实用~  回复  更多评论
  

# re: 或许你不知道的一个调试功能 2008-07-23 09:26 44you
我也用一下  回复  更多评论
  

# re: 或许你不知道的一个调试功能 2008-07-23 10:54 shanxmxj
呵呵`~不错 下次试试看。  回复  更多评论
  

# re: 或许你不知道的一个调试功能 2008-07-23 12:28 zhuxing
条件断点
异常断点
类加载断点
热替换
....
这些应该是eclipse开发者经常使用到的

调试功能使用的熟练程度,也会从一定程度反应出一个开发人员的基本功。扎实的调试能力,对修复bug、研究新代码、加速代码编写速度等都有很大的作用  回复  更多评论
  

# re: 或许你不知道的一个调试功能[未登录] 2008-07-23 20:28 hehe
这是我或许知道的一个调试功能  回复  更多评论
  

# re: 或许你不知道的一个调试功能 2008-07-24 14:47 Yata
还没用过,回头试试!  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: