我只是有一个想法,我想知道在java中是否可能。比方说,在使用eclipse或netbeans进行调试时,您可以记录一个对象并保存它。然后,当经过第二轮调试时,再次保存该对象。现在你可以比较第一个记录的对象和第二个对象的所有属性,并找出任何差异。这可能吗?很酷的调试对象
很酷的调试对象
回答
你可以用普通的Java代码(假设你的对象是Serializable
)做到这一点,但我认为任何调试器都没有内置此功能。
这只是在调试运行期间序列化第一个对象的情况(如果您有静态方法这样做,您通常可以从调试器调用)并将其保存在某处。然后,在第二次运行期间,调用另一种方法从它的序列化表单重新构建对象 - 然后比较对象(或者与它们的equals()
方法或一些更为定制的比较方法)。
实际上,尽管我发现每当我想要做到这一点,我只是在一张纸上涂抹相关属性并手动比较它们。我很少看到成千上万的可能在跑步之间发生变化的属性;如果你考虑到你所看到的症状和对象的行为,通常可以很好地理解甚至在启动调试器之前会发生什么变化,然后使用后者来确认你的假设并回溯到看到价值“出错”的地方。
的图9我喜欢你做什么以及在纸上写下来。并寻找更专业的方式做到这一点 – cometta 2009-10-10 10:03:16
给你的对象一个有用的toString()
方法,然后使用单元测试来比较结果和你的期望。
但我同意:用于远程调试的有线协议可以序列化任何对象,因此应该可以编写一个自动执行此操作的程序。
OTOH,不打算序列化的对象可能是危险的。如果你不小心在类加载器上使用它,你会得到所有的对象和类以及所有的东西。所以你需要一种方法来停止序列化,以确保它不会在深对象树中运行混乱。
最重要的是,我想要一个功能来保存应用程序的当前状态,并能够及时回溯。
我不认为任何调试器可以保存对象以便稍后进行比较。你虽然可以做的是建立在变量表变量,但与Apache公地ToStringBuilder()包裹它,并在控制台倾倒,像这样:
System.out.println(ToStringBuilder.reflectionToString(object));
每到达断点,时间对象的内容将显示在控制台中。你甚至可以看到私人数据。
因此,您不需要直接修改对象的toString()方法(例如,这对于库对象很有用)。然后您可以比较两次传球的输出。
看起来很酷的技术给我。感谢指出这一点 – cometta 2009-10-10 10:04:52
- 1. JavaScript [对象] [对象]调试
- 2. 试图复制一个很酷的下拉内容
- 3. STL有没有很酷的项目?
- 4. jboss的jmx控制台中很酷吗?
- 5. 的Facebook对象调试
- 6. 调试Varnish的hit_for_pass对象
- 7. BackgroundWorker很酷,但只报告进度
- 8. 调试对象快照
- 9. 调试JavaScript对象引用
- 10. 如何调试lombok对象
- 11. 调试集合对象
- 12. BluetoothGatt对象很忙
- 13. Intellij IDEA的调试器中的对象
- 14. 对象调试。 Char类的类
- 15. 调试DomXPath和DomDocument的对象
- 16. VisualStudio2005调试速度很慢
- 17. VS2010调试条目很慢
- 18. 传递给外部JavaScript的JSON对象 - 酷技巧
- 19. 有很多属性的对象的单元测试建议
- 20. 调用对象的对象
- 21. 在asp.net中的下拉列表很酷的样式?
- 22. 如何使我的URL看起来很酷与htaccess的
- 23. C++:有很多对象
- 24. 合并很多xts对象
- 25. Bs4创建对象很慢
- 26. 有没有人为FxCop/StyleCop创建过很酷的规则?
- 27. 有没有很酷的Drupal教程网站?
- 28. 只是一些初学者的水平javascript我认为很酷
- 29. 任何很酷的jQuery技术显示源代码?
- 30. C#:找到“很酷”数字时的错误答案
Eclipse在调试时做了一些与此相关的工作 - 它将突出显示断点之间更改的值/引用 - 请参阅http://www.ibm.com/developerworks/java/library/os-ecbug/ – Nate 2009-10-09 10:28:26