为啥 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 在某些机器上会失败?