在调试过程中,如何评估调试目标VM中的一段代码?

时间:2010-06-22 14:58:58

标签: eclipse debugging jdi

在调试期间,例如在Eclipse中,可以评估Watch Expressions或Conditional Breakpoints。通常,这些是在客户端评估的。例如,在Eclipse中进行调试时,它本身就是Eclipse本身,而不是评估这些表达式的调试目标VM。这可能非常昂贵,尤其是在条件断点的情况下,因为调试VM(即Eclipse)需要在每个断点命中时变为活动状态,即使条件的计算结果为false。

现在我的问题是调试协议是否允许它在调试目标VM中评估此类表达式或条件断点,以便目标VM仅在表达式/条件真正评估为TRUE时通知调试VM。

1 个答案:

答案 0 :(得分:0)

除了使用热代码替换的IDE(ab)用一个空的if块替换方法体并将(条件)断点放在那里,我在http://download.oracle.com/javase/1.5.0/docs/guide/jpda/jdwp/jdwp-protocol.html中找不到任何可能有用的东西这样做。

在EventRequest.Set中有一个exprId,它被记录为“面向未来”而未通过JDI BreakpointRequest公开,所以我认为这不会或将永远不会有效。

顺便说一句,评估发生在目标VM内部(即如果在表达式中使用equals(),则equals()将在目标vm中运行),但评估将从调试VM触发。