2010-04-26 15 views
0

當事情發生了,或者我的單元測試以不可預測的方式表現時,我通常必須進入調試模式。我花99%的時間在調試模式下檢查對象上的字段值以驗證其狀態。用於記錄對象內部狀態的工具或框架擴展或代碼片段?

我已經建立了log4net,看起來如果我可以輕鬆添加一行代碼來註銷對象的狀態,那麼我可以刪除大部分啓動龐大調試器的需求。問題當然是隱式公開對象狀態,你需要手動覆蓋每個對象的ToString()方法。我希望能夠做的是能夠做到logger.LogState(someObject)並註銷了對象狀態,包括至少一個所有私有變量的格式化列表,對某些任意深度的引用和集合。

有沒有人知道一個工具/框架/代碼片段,可以用來生成任何對象的內部狀態的字符串?我當然可以自己寫一篇,但這是一個不平凡的問題,我更喜歡有人思考的東西。

回答

1

你也許能夠做的,是爲紀念你的對象爲Serializable,然後用,例如,XMLSerializer將其序列一些流,類似於在accepted answerthis question。這可以輸出到您的日誌中。

當然,它確實假設你實際上可以使所有的對象都可序列化。

+0

是的,假設你有你的對象的控制權。當探索NHibernate如何工作時,並不是很好。 – 2010-04-26 01:23:16

1

如果要生成對象狀態轉儲,則需要一個工具來了解可爲每個字段生成日誌記錄信息的對象狀態的類型信息。 這樣的工具需要能夠解析源代碼,構建符號表,枚舉對象中的字段,並生成轉儲每個對象字段的代碼。

DMS Software Reengineering Toolkit擁有Java,C,C++和C#和JavaScript大部分必備元素。您需要構建一個自定義腳本來驅動DMS來枚舉您關心的類(除非要從每個可能的類和每個可能的方法調用中轉儲信息,否則需要定義此類),並在函數輸入中生成日誌轉儲(以及甚至可能在控制流程塊內部)。

相關問題