在两个调试会话之间保留对象ID

时间:2012-03-22 10:35:54

标签: java eclipse debugging

我正在使用eclipse调试器调试java应用程序。

我想知道调试器向我显示的对象ID(另请参阅Java object ID in jvm)。

是否可以在两个调试会话之间使这些ID相同?那么,当我调试相同的应用程序两次(一个接一个)相同的对象具有相同的ID?或者是否可以像这样设置断点:当涉及具有给定id的对象时,在任何语句处中断?

我想到了断点的定义,它不涉及某一行代码。我想到了一个独立于代码行的断点。一个只涉及id的断点。调试器,手头有这样的工具:他可以不用它来为我提供像我建议的功能吗?

2 个答案:

答案 0 :(得分:3)

这是不可能的。 id是调试器的内部,每次创建对象(或从序列化等恢复)时随机生成。此外,你不应该试图以这种方式滥用财产。

幸运的是,Java有可能满足您的需求:Object#hashCode。它是每个唯一对象的(半)唯一标识符(就Object#equals而言)。因此,只要数据相同,它就可以用于在调试会话中一致地识别对象。

Eclipse可以根据所有类成员变量为您生成hashCode()。我建议使用它,因为它可能适合您的需求并保证哈希具有所有期望的属性。它位于右键单击 - > Source->生成hashCode()和equals()

就断点而言,只需创建一个if检查正确的对象并在其中放置一个断点。

答案 1 :(得分:0)

我不知道在调试期间ID在Eclipse中代表什么(除了它们在该调试会话中唯一标识对象) - 可以是内存地址,句柄(内部或外部)等。因为对象通常是动态的创建后,调试器无法知道一个对象与另一个(过去)调试会话中的另一个对象相同。

我可以想象这种情况发生的唯一方法是,如果根据创建顺序分配ID,并且以完全相同的顺序创建完全相同的对象 - 不是可能的事件。

所以答案是否定的。