我只是有一個想法,我想知道在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