我目前正在实现一个 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/