Java 对象的冷调试

Java 对象的冷调试,java,eclipse,netbeans,Java,Eclipse,Netbeans,我只是有一个想法,我想知道在java中是否可能。假设在使用eclipse或netbeans进行调试时,您可以记录一个对象并保存它。然后在进行第二轮调试时,再次保存该对象。现在,您可以比较记录的第一个对象与第二个对象的所有属性,并找出任何差异。这是可能的吗?假设对象是可序列化的,您可以在普通Java代码中实现这一点,但我认为没有任何调试器内置此功能 这只是在调试运行期间序列化第一个对象的一种情况,如果您有一个静态方法这样做,通常可以从调试器调用并将其保存在某个地方。然后,在第二次运行期间,调用另一

我只是有一个想法,我想知道在java中是否可能。假设在使用eclipse或netbeans进行调试时,您可以记录一个对象并保存它。然后在进行第二轮调试时,再次保存该对象。现在,您可以比较记录的第一个对象与第二个对象的所有属性,并找出任何差异。这是可能的吗?

假设对象是可序列化的,您可以在普通Java代码中实现这一点,但我认为没有任何调试器内置此功能

这只是在调试运行期间序列化第一个对象的一种情况,如果您有一个静态方法这样做,通常可以从调试器调用并将其保存在某个地方。然后,在第二次运行期间,调用另一个方法以从序列化形式重新构造对象,然后将对象与其equals方法或其他定制的比较方法进行比较


但在实践中,我发现每当我想这样做时,我只是在一张纸上草草记下相关属性,然后手动比较它们。我很少看到在一次运行之间可能会发生变化的成千上万的属性;如果您考虑所看到的症状和对象的行为,通常在启动调试器之前,您就可以很好地了解可能发生的变化,然后使用后者来确认您的假设,并回溯到值出错的地方。

您可以在普通Java代码中这样做,假设您的对象是可序列化的,但我认为没有任何调试器内置此功能

这只是在调试运行期间序列化第一个对象的一种情况,如果您有一个静态方法这样做,通常可以从调试器调用并将其保存在某个地方。然后,在第二次运行期间,调用另一个方法以从序列化形式重新构造对象,然后将对象与其equals方法或其他定制的比较方法进行比较

但在实践中,我发现每当我想这样做时,我只是在一张纸上草草记下相关属性,然后手动比较它们。我很少看到在一次运行之间可能会发生变化的成千上万的属性;如果您考虑所看到的症状和对象的行为,通常在启动调试器之前,您就可以很好地了解可能发生的变化,然后使用后者来确认您的假设,并回溯到值出错的地方。

给您的对象一个有用的toString方法,然后使用单元测试将结果与您预期的结果进行比较

但我同意:远程调试的wire协议可以序列化任何对象,因此应该可以编写一个自动执行此操作的程序

OTOH,不打算序列化的对象可能是危险的。如果你不小心在类加载器上使用了它,你会把所有的对象、类和所有的东西都作为一个大的块拿回来。因此,您需要一种停止序列化的方法,以确保它不会在深层对象树中运行

除此之外,我还希望有一个功能可以保存应用程序的当前状态,并能够及时返回。

为对象提供一个有用的toString方法,然后使用单元测试将结果与预期结果进行比较

但我同意:远程调试的wire协议可以序列化任何对象,因此应该可以编写一个自动执行此操作的程序

OTOH,不打算序列化的对象可能是危险的。如果你不小心在类加载器上使用了它,你会把所有的对象、类和所有的东西都作为一个大的块拿回来。因此,您需要一种停止序列化的方法,以确保它不会在深层对象树中运行


除此之外,我还希望有一个功能可以保存应用程序的当前状态,并能够及时返回。

我认为任何调试器都无法保存对象以供以后比较。但是,您可以做的是在变量上创建一个watch变量,但用apache commons的

System.out.println(ToStringBuilder.reflectionToString(object));
每次到达断点时,对象的内容都将显示在控制台中。您甚至可以看到私有数据


因此,您不需要直接修改对象的toString方法,例如,这对库对象很有用。然后,您可以比较两个过程的输出。

我认为任何调试器都无法保存对象以便以后比较它们。但是,您可以做的是在变量上创建一个watch变量,但用apache commons的

System.out.println(ToStringBuilder.reflectionToString(object));
每次到达断点时,对象的内容都将显示在控制台中。您甚至可以看到私有数据

因此,您不需要直接修改对象的toString方法,例如,这对库对象很有用。然后可以比较输出
您的两个过程。

Eclipse在调试中做了一些类似的事情-它将突出显示断点之间更改的值/引用-请参阅Eclipse的图9在调试中做了一些类似的事情-它将突出显示断点之间更改的值/引用-请参阅我喜欢您在纸上写下的内容的图9。寻找更专业的方法来做这件事,我喜欢你所做的,也可以写在纸上。并寻找更专业的方法来做这件事