在调试Java时解密变量信息

在调试Java时解密变量信息,java,debugging,intellij-idea,Java,Debugging,Intellij Idea,我使用IntelliJ IDEA 8调试一些Java,但这个问题可能适用于所有Java调试器。在变量列表中,它们显示为: myVariable={some.package。SomeClass@12345} 我对类名后面的数字很好奇。确切的数字是多少?如果引用的是同一个底层对象,那么两个变量的编号是否相同 提前感谢。这是JVM报告的objectId,有关详细信息,请参阅 唯一标识中的对象 目标虚拟机。一个特定的对象将是 由中的一个objectID标识 JDWP命令和回复贯穿始终 其生存期(或直到o

我使用IntelliJ IDEA 8调试一些Java,但这个问题可能适用于所有Java调试器。在变量列表中,它们显示为:

myVariable={some.package。SomeClass@12345}

我对类名后面的数字很好奇。确切的数字是多少?如果引用的是同一个底层对象,那么两个变量的编号是否相同


提前感谢。

这是JVM报告的objectId,有关详细信息,请参阅

唯一标识中的对象 目标虚拟机。一个特定的对象将是 由中的一个objectID标识 JDWP命令和回复贯穿始终 其生存期(或直到objectID 显式处理)。ObjectID是 不重复使用以识别不同的 对象,除非已显式 已处置,无论 引用的对象已被丢弃 收集。objectID为0表示 空对象。请注意,存在 对象ID的更改不会阻止 对象的垃圾回收。任何 尝试访问垃圾 已收集对象及其对象ID 将导致无效的_对象 错误代码。垃圾收集可以是 已使用DisableCollection禁用 命令,但通常不是 必须这样做


这是JVM报告的objectId,有关详细信息,请参阅

唯一标识中的对象 目标虚拟机。一个特定的对象将是 由中的一个objectID标识 JDWP命令和回复贯穿始终 其生存期(或直到objectID 显式处理)。ObjectID是 不重复使用以识别不同的 对象,除非已显式 已处置,无论 引用的对象已被丢弃 收集。objectID为0表示 空对象。请注意,存在 对象ID的更改不会阻止 对象的垃圾回收。任何 尝试访问垃圾 已收集对象及其对象ID 将导致无效的_对象 错误代码。垃圾收集可以是 已使用DisableCollection禁用 命令,但通常不是 必须这样做


JDWP objectID有些无用,因为我们无法从代码中访问它。对象的System.identityCashCode()将更加有用。这是因为我们经常有一个对象A,其中包含对对象B的引用,在对象A的toString()中,我们可以包含对象B的标识哈希代码,但是我们通过变量/watchs/etc查找具有该标识哈希代码的对象B,却找不到它,因为IntelliJ IDEA并不是通过身份哈希代码来报告它的,这同样适用于日志记录:我们经常记录对对象的引用;记录对象实例的一种简单而可靠的方法是记录其identityHashCode。但同样,IntelliJ IDEA无法验证日志中引用的对象是否与变量中出现的引用相同,因为我只能记录identityHashCode,但IntelliJ IDEA显示JDWP objectID。JDWP objectID有些无用,因为我们无法从代码中访问它。对象的System.identityCashCode()将更加有用。这是因为我们经常有一个对象A,其中包含对对象B的引用,在对象A的toString()中,我们可以包含对象B的标识哈希代码,但是我们通过变量/watchs/etc查找具有该标识哈希代码的对象B,却找不到它,因为IntelliJ IDEA并不是通过身份哈希代码来报告它的,这同样适用于日志记录:我们经常记录对对象的引用;记录对象实例的一种简单而可靠的方法是记录其identityHashCode。但同样,IntelliJ IDEA无法验证日志中引用的对象是否与变量中出现的引用相同,因为我只能记录identityHashCode,但IntelliJ IDEA显示JDWP objectId。