Eclipse:内联断点

时间:2018-11-01 14:55:47

标签: java eclipse debugging jdi

是否可以在Eclipse IDE中设置内联断点(带有插件)?

例如,在同一行中调用多个方法时,是否可以为该行中的特定方法调用而不是整个行设置断点?

foo(bar(), baz());
           ^

(在此示例中,可以在方法baz的定义中设置一个断点,但是如果也由其他方法调用该断点,则如果必须继续执行大多数操作,可能会很烦人。时间。)

如果我正确理解它,则Java调试接口将允许这样做,请参见Location#codeIndex()

1 个答案:

答案 0 :(得分:1)

foo(bar(), 
    baz());

最简单的方法是在baz()之前进行换行,并将断点照常放置在找到的baz()上。在Java中,以这种方式用换行符包围方法调用不会影响其评估。

screenshot from eclipse

更新:

OP希望选择baz的调用并在对该表达式本身的求值上创建一个断点,而无需在断点或源代码的编辑上附加任何条件。

据我所知,Eclipse附带的标准调试工具无法实现。

但是,您可以使用conditional breakpoints来达到此效果。在Eclipse中,您可以正常创建或选择一个断点,然后在“断点”视图中访问条件选项。

通过菜单项“窗口”->“显示视图”->“断点”访问断点视图。到达那里后,选择或创建您的断点,然后检查条件选项。然后,您必须描述一个适合您周围代码和需求的条件。条件为真时,将触发您的断点。例如,通过指定呼叫站点的电话号码或方法名称。

Breakpoints View in Eclipse, with conditionals enabled

我的回答基于this SO answer

在我自己的示例代码中,我具有以下设置:

a(){
  baz(); 
  m();
}

m(){
  foo(bar(), baz());
}

,我的断点位于baz()中。添加条件语句

Thread.currentThread().getStackTrace()[2].getMethodName().equals("m")

到我的断点意味着它仅在从m()调用baz()而不是从a()调用时触发。