在调试 C/C++ 应用程序时,我可以创建一个将地址转换为指针类型的监视,然后查看结构的内容,即使它超出范围也是如此。是否有可能在Java中实现类似的东西?
假设我在一个方法中,我在“&this”之类的东西上添加了一个手表,然后当我离开类方法时,即使它超出范围,我仍然可以看到它的内容?
我很确定我的问题的答案是“不”,所以我最感兴趣的是“为什么不?” 解释。这是 JVM 限制吗?JPDA 限制?有没有更好的地方来问这样一个专门的问题?
在 C/C++ 中,您正在观察(指向的区域)一个任意指针,并强制转换为该变量。
在 Java 中没有指针。你只能watch
是一个变量。超出范围是不存在的。
为什么你还想看呢?如果您将手表放在上面,则在范围内可以正常观看。
您无法查看不在范围内的变量。
但是,如果您发现另一个指向它的变量,您可以观察同一个对象。
观察一个没有在任何地方引用的对象是没有意义的(它不会以任何方式影响程序的执行,它不能再被改变,它将被垃圾收集并且内存被完全不同的东西重用)。
Java 级别的调试工具仍然在 JVM 内存管理之上工作,因此您需要对对象的有效引用,而不能只查看随机内存区域。