为啥 Eclipse 的表达式视图在某些类上失败?

Posted

技术标签:

【中文标题】为啥 Eclipse 的表达式视图在某些类上失败?【英文标题】:Why does Eclipse's expression view fail on some classes?为什么 Eclipse 的表达式视图在某些类上失败? 【发布时间】:2013-06-22 16:36:04 【问题描述】:

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

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

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

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

非工人阶级JavacParser:

工薪阶层EndPosParser:

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

谢谢!

【问题讨论】:

我遇到了很多针对此错误的旧报告和错误修复,但它们似乎都与旧问题有关(即:具有泛型的类,版本 3.1-3.8),我现在在 4.x+ 上,仍然看到这个。希望有人能找到解释,以便举报。 我已经设法通过覆盖 toString() 方法来解决这个问题。可能想试一试。不过,这是实现这一目标的一种非常老套的方式。如果我想出更好的解决方案,我稍后会更新。 【参考方案1】:

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

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

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

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

【讨论】:

以上是关于为啥 Eclipse 的表达式视图在某些类上失败?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Eclipse 在 Mac OSX 上找不到正则表达式?

在eclipse中开发android 为啥不能用lambda表达式

使用 P/Invoke 调用 dll 时,为啥 LoadLibrary 在某些机器上会失败?

为啥我的选择器视图没有出现在某些文本字段上?

eclipse 中打开android的xml文件为啥没有视图显示

为啥适用于 iOS 6 的 Facebook SDK 在某些用户上失败但在其他用户上成功?