9

对于一个研究项目,我正在使用 Eclipse 在 OpenJDK 源代码上进行开发。出于调试目的,集成调试器的“表达式”和“显示”视图非常有用。单步执行编译器工具的代码时,某些javac的表达式视图会失败。然后,即使是最简单的表达式也会在其值列中获得一个。详细的错误消息是:<error(s)_during_the_evaluation>

Evaluations must contain either an expression or a block of well-formed statements

我很确定,我输入了有效的表达式,因为简单地切换到调用方法(高一个堆栈帧)使视图工作。

我上传了两张截图,两张让问题更清楚:

非工人阶级JavacParser 非工薪阶层

工薪阶层EndPosParser 工人阶级

有没有人遇到过类似的问题或知道原因是什么或如何解决?在显示的两个视图之间切换时,除了将堆栈帧高出一个堆栈帧外,我什么也不做。预计这两种表达式都将在两种情况下进行评估。据我所知,显示的失败行为只发生在JavacParser课堂上。

谢谢!

4

1 回答 1

0

据我所知,表达式是在当前(最顶层)堆栈帧的上下文中评估的。

似乎您的第一个屏幕截图是在EndPosParser构造对象 ( ) 时拍摄的。由于您的对象尚不存在,this因此无法评估。this在到达超级调用链之前,无法评估对的引用Object

我不知道为什么1+2不能评价。我最好的猜测是:Eclipse 将构造函数识别为非静态方法,并尝试1+2在非静态上下文中进行评估。但这又失败了,因为this还不存在。

编辑:这是我刚刚试图回答的一个该死的老问题......

于 2017-04-11T06:24:09.807 回答