在两个调试会话之间保留对象ID
我正在使用eclipse调试器调试java应用程序。在两个调试会话之间保留对象ID
我想知道的对象ID调试器显示给我(见Java object ID in jvm)。
是否可以在两个调试会话中使这些ID相同?所以,当我调试相同的应用程序两次(一个接一个)相同的对象具有相同的ID?或者是否有可能像这样设置断点:在涉及给定id的对象时,在任何语句中断开?
我记住了一个不涉及某一行代码的断点定义。我想到了一个独立于代码行的断点。仅涉及id的断点。调试器有一个类似于这些ID的工具:他不能用它来为我提供像我建议的功能吗?
这是不可能的。该ID在调试器内部,每创建一个对象(或从序列化中恢复等)时都会随机生成。此外,你不应该试图以这种方式滥用财产。
幸运的是,Java有一些东西,可能会满足您的需求:Object#hashCode
。它是每个唯一对象的(半)唯一标识符(就Object#equals
而言)。因此,只要数据相同,就可以在调试会话中一致地识别对象。
Eclipse可以基于所有类的成员变量为您hashCode()
。我建议使用它,因为它可能会适合您的需求,并保证散列具有所有期望的属性。它是在右键单击 - >源代码 - >生成hashCode()和等于()
就断点而言,只需创建一个if检查正确的对象并放置一个断点。
我不知道具体是什么标识调试(除了他们唯一标识在调试会话对象)期间在Eclipse代表 - 可能是内存地址,手柄(内部或外部),等。由于对象通常是动态创建的调试器无法知道一个对象在另一个(过去)调试会话中与另一个对象相同。
我能想象这种情况发生的唯一方法是如果ID是基于创造的秩序,以相同的顺序将创建完全相同的对象分配 - 而不是一个可能的事件。
所以答案是否定的。
只要确保的hashCode是不是基于存储器地址的一个默认将从运行改为运行 – Attila 2012-03-22 10:49:29
@Attila这就是为什么我建议让Eclipse中生成一个 – dtech 2012-03-22 10:52:13