在Eclipse中,有没有办法在第一次命中另一个断点之前禁用断点?
答案 0 :(得分:6)
这是一个很大的黑客,但它是一个功能性的解决方法:
调用'trigger'位置断点1和目标位置断点2.如果执行已通过断点1,我们希望断点2触发if-and-only-。
在每个设置条件断点。
对于断点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}
方法。
答案 1 :(得分:5)
没有。但是你可以有条件断点。我想,击中另一个断点表明状态发生了一些变化。
所以,Right click the breakpoint -> Breakpoint properties -> check "conditional"
答案 2 :(得分:0)
如果您知道将触发另一个断点的条件,则可以将该条件添加到新断点。
答案 3 :(得分:0)
条件断点是一种可能性,您还可以设置命中计数,以便断点仅在达到指定次数后触发。
但不,没有办法做你要问的事。
答案 4 :(得分:0)
另一个想法是禁用断点并在其他断点被击中后启用它。