在Eclipse中调试代码时,我遇到了以下问题。有一个WHILE循环,可能有大约10,000次迭代。因此,在这里使用Step并不是一个好主意。所以,我把断点放在WHILE循环之后。但似乎这个WHILE循环已经进入了内部循环。我不知道如何找到导致此问题的正确迭代。有没有办法区分代码的长执行时间和内部循环?我该怎么做才能在代码中快速找到这样的死锁位置?
P.S。该代码适用于小型数据集......
答案 0 :(得分:3)
如果您正在寻找死锁,您可以在没有断点的情况下在调试中运行该程序并等待它死锁然后停止它。
如果您希望它在特定迭代中停止,您可以添加条件断点,但这会使执行速度变慢。
我所做的是将条件添加到代码中,例如
if (i == 10000 && condition)
Thread.yield(); // add break point here.
或者如果您有一个返回错误值的方法,您可以执行类似
的操作boolean ok = method();
if (!ok)
method(); // add a break point here so you can see why it fails.
答案 1 :(得分:2)
用于测试的代码重写 它不太可能以指数方式放慢速度,比如在不断增长的LinkedList,分配,交易中进行搜索。
if (i > 8000) {
show loop duration; // breakpoint here
} else if (i > 6000) {
show loop duration; // breakpoint here
} else if (i > 4000) {
show loop duration; // breakpoint here
}
如果循环变慢,我会介绍 StopWatch 。使用 findBugs 检查手柄泄漏。最后,用较小的方法重写有助于遗留代码。