对于一个研究项目,我正在使用Eclipse开发OpenJDK源代码。出于调试目的,集成调试器的“表达式”和“显示”视图非常有用。当单步执行javac
编译器工具的代码时,表达式视图在某些类上失败。然后,即使是最简单的表达式也会在其值列中获得<error(s)_during_the_evaluation>
。
然后是详细的错误消息:
Evaluations must contain either an expression or a block of well-formed statements
我很确定,我已经输入了有效的表达式,因为简单地切换到调用方法(一个堆栈帧更高)使视图工作。
我上传了两个截图,两个让问题更加清晰:
非工作班JavacParser
:
工人阶级EndPosParser
:
有没有人遇到类似问题或者知道原因是什么或如何解决?在两个显示的视图之间切换时,除了将一个堆栈帧更高之外,我什么都不做。预计两种表达都将在两种情况下进行评估。据我所知,所显示的失败行为仅发生在JavacParser
类中。
谢谢!
答案 0 :(得分:0)
据我所知,表达式是在当前(最顶层)堆栈帧的上下文中进行评估的。
似乎是在构建对象(EndPosParser
)时拍摄的第一个屏幕截图。由于您的对象尚不存在,因此无法评估this
。在超级调用链达到this
之前,无法评估对Object
的引用。
我不确定无法评估1+2
的原因。我最好的猜测是:
Eclipse将构造函数识别为非静态方法,并尝试在非静态上下文中评估1+2
。但这再次失败,因为this
尚不存在。
编辑:这是我刚刚试图回答的一个该死的老问题......