如何在Java的jdb中跳过一定次数的断点?

时间:2009-12-07 00:34:54

标签: java debugging jdb

如何在jdb中跳过断点一定次数?

jdb的帮助提供了这个提示:

!!                        -- repeat last command
<n> <command>             -- repeat command n times
# <command>               -- discard (no-op)

当我尝试多次跳过断点时,如下所示:

80 cont

或者像这样:

80 run

jdb barfs:

main[1] 80 cont
> Nothing suspended.
> Nothing suspended.
> Nothing suspended.
> Nothing suspended.
> Nothing suspended.
> Nothing suspended.

Breakpoint hit: main[1] > Nothing suspended.
> Nothing suspended.
> Nothing suspended.
> Nothing suspended.
> Nothing suspended.
> Nothing suspended.Exception in thread "event-handler" java.lang.NullPointerException
        at com.sun.tools.example.debug.tty.TTY.printCurrentLocation(TTY.java:212)
        at com.sun.tools.example.debug.tty.TTY.vmInterrupted(TTY.java:189)
        at com.sun.tools.example.debug.tty.EventHandler.run(EventHandler.java:86)
        at java.lang.Thread.run(Thread.java:619)

> Nothing suspended.
> Nothing suspended.
> Nothing suspended.
> Nothing suspended.
> Nothing suspended.
> Nothing suspended.
> Nothing suspended.
> Nothing suspended.
> Nothing suspended.
> Nothing suspended.
> Nothing suspended.
> Nothing suspended.
> Nothing suspended.
> Nothing suspended.
> Nothing suspended.
> Nothing suspended.
> Nothing suspended.
> Nothing suspended.

这里发生了什么?我怎样才能获得理想的行为?

版本:

> version
This is jdb version 1.6 (J2SE version 1.6.0_16)
Java Debug Interface (Reference Implementation) version 1.6
Java Debug Wire Protocol (Reference Implementation) version 1.6
JVM Debug Interface version 1.1
JVM version 1.6.0_17 (Java HotSpot(TM) Client VM, mixed mode, sharing)

为了澄清,我正在远程调试。例如,我的第一个窗口就是这样开始的:

% java -Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n LZWDecompress

我的第二个窗口就是这样开始的:

% jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8000

3 个答案:

答案 0 :(得分:5)

不幸的是,jdb中的断点不提供任何奇特的功能,例如条件断点或“停止每n次迭代”。

但是,由于您无论如何都要进行远程连接,因此您可能需要考虑在编辑器中使用调试器,因为大多数编辑器都允许您连接到远程计算机。由于大多数调试工作都是在JVM中完成的,并且只有编辑器完成显示,因此它的速度不会比使用jdb慢得多。

答案 1 :(得分:3)

这并不能完全回答你的问题,但快速解决方法可能是设置一些全局计数器变量并执行

if(counter>=num_skips) 
    {counter++;} //set breakpoint on this line
else 
    {counter++;}

答案 2 :(得分:2)

使用像eclipsenetbeans之类的ide是否可以接受? 两者都提供了点击计数器和其他形式的conditional breakpoints