在Eclipse中,有没有办法禁用断点,直到第一个命中另一个断点?

Kyl*_*yle 6 eclipse debugging

在Eclipse中,有没有办法禁用断点,直到第一个命中另一个断点?

Aar*_*onD 6

这是一个很大的黑客,但它是一个功能性的解决方法:

调用'trigger'位置断点1和目标位置断点2.如果执行已经通过断点1,我们希望断点2在if-and-only-fire时触发.

在每个设置条件断点.

对于断点1,将条件设置为System.setProperty("breaknow", "breaknow") == "".这种情况永远不会成立,但会设置一个我们可以在断点2读取的系统属性.

对于断点2,将条件设置为System.clearProperty("breaknow") != null.设置系统属性时会触发此条件,并清除它(因此我们可以根据需要重复).

正如我所说,这是一个黑客,但它似乎工作.我提交了一个Eclipse增强请求来实现链接或链接断点作为本机功能(https://bugs.eclipse.org/bugs/show_bug.cgi?id=390590).不幸的是,我自己没有带宽来实现它,但也许有一天我们会得到更清洁的解决方案.

一个警告(适用于所有条件断点,而不仅仅适用于此技巧):根据我的经验,似乎设置条件断点会阻止JIT编译感兴趣的方法,而是以解释模式运行它.或许,它允许第一个C1 JIT阶段,但阻止第二阶段C2编译器优化?

在任何一种情况下,您都应该知道,调试的方法在条件断点就位时会运行得相当慢.这通常不是问题,但是在调试非常紧密的内循环时,我发现最好回到(草率)if (x) { // Do somthing useless and set a breakpoint here}方法.


Boz*_*zho 5

不,但你可以有条件断点.我想,击中另一个断点表明状态发生了一些变化.

所以, Right click the breakpoint -> Breakpoint properties -> check "conditional"