Eclipse调试"陷阱"

调试也有陷阱?

我想是有的, 今天就发现了一个. 如果以后还能发现, 再继续补充吧

自从今年四月正式写Java代码以来, 越来越惊叹于Java的神奇,且不说自动垃圾收集吧, 连她的调试也好像充满了神秘色彩 (不过,可能我的Java水平太菜了), 居然圈中一个函数, 能得出函数的最终返回结果, 那么调试器必须具备类似分析脚本的功能(我用的是Eclipse 2.1.3). 但是这种强大的功能有时候也会帮倒忙.

来看下面这段普通代码

 

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;


/*
 * IteratorDebuggingTrap.java 2004-7-1
 *
 *
 * chenxh
 */

/**
 * @author chenxh
 * 2004-7-1
 *
 *
 */
public class IteratorDebuggingTrap {

 public static void main(String[] args) {
  List list = new ArrayList();
  list.add("a");
  list.add("b");
  list.add("c");
  for (Iterator iter = list.iterator(); iter.hasNext();) {
   System.out.println(iter.next());
  }
  
 }
}

 

执行结果

a
b
c
没什么异常啊, 但是如果你在

System.out.println(iter.next());

加上断点, 并圈中iter.next()监视,

结果却是

b

很奇怪,不是吗. 仔细观察不难发现, 其实调试器本身也调用iter.next(),每过一次断点调用一次叠代子的next(), 结果还是和断点的多少有关的, 即监视的次数, 如果你在

for (Iterator iter = list.iterator(); iter.hasNext();) {

设置了断点, 结果回是

c

如果你再把代码的

 list.add("c");

去掉, 将会很不幸的得到一个运行时错误

java.util.NoSuchElementException

不过这没什么好大惊小怪的了,因为我已经清楚了出错的原因, 不过刚遇到这种情况是也许会很诧异.

注:我用的IDE是Eclipse, 我的java水平有限, 对一些主流的IDE比如JBuilder也都不怎么熟悉, 不知道像JBuider这样的工具是否也会出现这样的小陷阱

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值