java - 从 IVariable 对象表示中提取真实对象

标签 java eclipse debugging eclipse-plugin

我目前正在实现一个 IDebugContextListener 类(eclipse 开发人员工具 API/库的一部分)来监听调试器中的事件变化。实现这一点的方法是:

private void contextActivated(ISelection context) {
        if (context instanceof StructuredSelection) {
                Object data = ((StructuredSelection) context).getFirstElement();
                if (data instanceof IStackFrame) {
                        reciever.setStackFrame((IStackFrame) data);
                } else {
                        reciever.setStackFrame(null);
                }
        }
}

基本上,调试器为我的程序提供了 IStackFrame,其中包含 IVariables,它给出了正在调试的程序中正在发生的事情的模型。据我所知,这些是正在调试的程序上运行的真实变量的数据表示。 IVariables 的功能有限,因为它们可以做一些基本的事情,例如获取它们所代表的变量的名称和类型等。

这可能是不可能的,但有什么方法可以获取它所表示的实际对象的副本,而不是使用 IDebugContextListener 类的 IVariable 数据表示?

我的目的是想使用对象的内部函数。使用 IVariables,我只能访问对象内部变量的属性。

最佳答案

IVariable/IValue 接口(interface)提供了一种通用的、独立于语言的获取调试信息的方法。这意味着,实际上不可能使用这些值直接从调试器获取当前值。

但是,语言环境(例如 JDT)提供了第二个特定于语言的层来帮助获取该信息,如果是 JDT,请参阅 org.eclipse.jdt.debug project .

有关获取 Java 调试器值的更详细示例,请参阅 source code of the Inspect action .基本上,这段代码展示了如何与调试的 JVM 通信。

警告:此处提供的解决方案可能依赖于 JDT 的内部代码(可能在 jdt 插件之外仍然可用);并且与其他 JVM 通信可能会很慢。小心。

关于java - 从 IVariable 对象表示中提取真实对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11303084/

相关文章:

asp.net - MVC 项目中的 Web API 未达到断点 ("symbols not loaded")

java - 使用继承(使用抽象类)在自定义框架内为子类提供一小部分方法的更优雅的方式?

java - 何时使用 Navigator 或 Package Explorer View ?

java - 当项目转换为可执行 jar 时,序列化文件不起作用?

eclipse - 使用 Eclipse 将 Maven 与现有 Java 项目集成

android - AdMob 在重复启动应用程序时导致模拟器崩溃

java - 为什么我的 Arrays.sort 方法返回错误?

java - 使用 Java 从 TrueType 字体渲染重音字符在某些系统上看起来是错误的

java.lang.NoClassDefFoundError : org/apache/taglibs/standard/tag/rt/core/ImportTag 错误

android - 从模拟器或连接的设备调试本地 API