java调试-监视范围外变量

java调试-监视范围外变量,java,debugging,jvm,jpda,Java,Debugging,Jvm,Jpda,调试C/C++应用程序时,我可以创建一个指针类型的地址转换表,然后查看结构的内容,即使它超出范围。在Java中有可能实现类似的功能吗? 假设我在一个方法中,我在“&this”中添加了一个表,然后当我离开类方法时,我仍然可以看到它的内容,即使它超出了范围 我很确定我的问题的答案是“不”,所以我最感兴趣的是“为什么不?”的解释。这是JVM限制吗?JPDA限制?有更好的地方可以问这样一个专门的问题吗?在C/C++中,您正在观察(指向的区域)一个任意指针,并将其转换为该变量 在Java中没有指针。您只能

调试C/C++应用程序时,我可以创建一个指针类型的地址转换表,然后查看结构的内容,即使它超出范围。在Java中有可能实现类似的功能吗?
假设我在一个方法中,我在“&this”中添加了一个表,然后当我离开类方法时,我仍然可以看到它的内容,即使它超出了范围

我很确定我的问题的答案是“不”,所以我最感兴趣的是“为什么不?”的解释。这是JVM限制吗?JPDA限制?有更好的地方可以问这样一个专门的问题吗?

在C/C++中,您正在观察(指向的区域)一个任意指针,并将其转换为该变量

在Java中没有指针。您只能查看变量。超出范围它不存在


你为什么还要看呢?如果你把手表放在上面,它在范围内时会被正确地观察

无法查看不在范围内的变量

但是,如果找到指向同一对象的另一个变量,则可以观察该对象

观察一个没有在任何地方引用的对象是没有意义的(它不能以任何方式影响程序的执行,它不能再被更改,它将被垃圾收集,内存被完全不同的东西重用)


Java级别的调试工具仍然在JVM内存管理之上工作,因此您需要一个对对象的有效引用,您不能只查看随机内存区域。

我认为您不理解这个问题。对象仍然有对它的引用,只是不是来自我目前正在处理的当前类。比方说,我正在逐步进行20个方法调用,想看看其中哪一个修改了这个对象。我想你只能通过找到贯穿这20个方法(可能在调用堆栈的某个位置)的引用,然后观察这个方法。对象存在于范围之外。假设我有一个大的对象图和一个复杂的算法来处理它。我想知道算法在哪一个阶段修改图形中的特定对象。我想一步一步地看一看我感兴趣的瞬间发生了什么。嗯……是的,我的错。但必须有某个引用位于可访问该对象的范围内。我想你需要观察使用范围这个对象,深入到感兴趣的对象。我可以看出这是不方便的,有时甚至不支持。