是否有一种简单的方法来输出人类可读的对象图(特别是对于例外)

时间:2009-06-03 12:59:47

标签: .net reflection serialization exception-handling

我有一个未处理的异常处理程序(如果有的话,这是一个矛盾的),但我希望从中得到更多的信息。

此时它会记录异常消息,堆栈跟踪等,并以递归方式对任何内部异常执行相同操作。但是,异常通常是异常类的派生类型,因此我不知道它会是什么样子。所以我想要的是一些代码使用反射将所有原始字段和属性作为名称/值对输出到文本文件,然后递归地对对象图中的任何非基本对象执行相同的操作。

我自己去做这件事,但很快意识到我必须处理收藏等等,而且之前必须有人这样做过。另一个选择可能是我想使用序列化。

以前有人这样做过吗?那里有什么代码?

2 个答案:

答案 0 :(得分:0)

您可以使用Reflection来输出Exception的所有属性,但是您应该对过于复杂的日志记录/异常处理代码保持警惕,因为异常处理程序中的异常可能会让您没有有用的调试信息来调试原始例外。 特别是,如果您要递归输出该Exception的任何非主要对象,那么请考虑如果您有任何循环引用会发生什么。

每当我想记录所有内容时,我通常只使用ex.ToString() - 它看起来不漂亮,并且可能不包含异常中的所有数据(除非基类重载了ToString()方法)但是我发现一般来说它包含足够的信息。

或者,如果您正在处理您可以控制的自定义异常,那么您可能会发现序列化是更好的解决方案。

答案 1 :(得分:0)

我会看一下ELMAH项目。它适用于ASP.NET,因此您无法在WinForms项目中使用它,但它可能有一些想法可以激发一些东西。