有没有办法在 Eclipse IDE 中设置内联断点(使用插件)?
例如,当在同一行中调用多个方法时,有没有办法为该行中的特定方法调用设置断点,而不是为整个行设置断点?
foo(bar(), baz());
^
(在这个例子中,可以在方法的定义处设置断点baz
,但如果它也被其他方法调用,那么如果你大部分时间都必须继续,那可能会很烦人。)
如果我理解正确,Java 调试接口将允许这样做,请参阅Location#codeIndex()。
有没有办法在 Eclipse IDE 中设置内联断点(使用插件)?
例如,当在同一行中调用多个方法时,有没有办法为该行中的特定方法调用设置断点,而不是为整个行设置断点?
foo(bar(), baz());
^
(在这个例子中,可以在方法的定义处设置断点baz
,但如果它也被其他方法调用,那么如果你大部分时间都必须继续,那可能会很烦人。)
如果我理解正确,Java 调试接口将允许这样做,请参阅Location#codeIndex()。
foo(bar(),
baz());
最简单的方法是在 baz() 之前进行换行并将断点正常放置在 baz() 所在的行上。在 Java 中,以这种方式用换行符包围方法调用不会影响其评估。
OP 希望选择 baz 的调用并在该表达式本身的评估上设置一个断点,而不需要对断点或源代码的编辑有任何额外的条件。
据我所知,使用 Eclipse 附带的标准调试工具是不可能的。
但是,您可以使用条件断点来实现此效果。在 Eclipse 中,您可以正常创建或选择断点,然后访问 Breakpoints View 中的条件选项。
通过菜单项 Window -> Show View -> Breakpoints 访问 Breakpoint View。在那里,选择或创建断点,然后检查条件选项。然后,您必须描述一个适合您周围代码和需求的条件。当条件为真时,您的断点将触发。例如,通过指定调用站点行号或方法名称。
我的答案基于这个 SO answer。
在我自己的示例代码中,我有以下设置:
a(){
baz();
m();
}
m(){
foo(bar(), baz());
}
我的断点位于 baz() 中。添加条件语句
Thread.currentThread().getStackTrace()[2].getMethodName().equals("m")
到我的断点意味着它仅在从 m() 调用 baz() 时触发,而不是从 a() 调用。