Есть ли простой способ вывести понятный человеку граф объектов (специально для исключения) - PullRequest
2 голосов
/ 03 июня 2009

У меня есть необработанный обработчик исключений (оксюморон, если когда-либо был), но я хотел бы получить от него больше информации.

В данный момент он регистрирует сообщение об исключении, трассировку стека и т. Д. И рекурсивно делает то же самое для любых внутренних исключений. Однако часто исключение является производным типом класса исключения, и поэтому я не знаю заранее, как оно будет выглядеть. Поэтому мне хотелось бы, чтобы некоторый код использовал отражение, чтобы вывести все примитивные поля и свойства в текстовый файл в виде пар имя / значение, а затем сделать то же самое для любых непримитивных объектов в графе объектов.

Я попытался сделать это сам, но быстро понял, что мне придется иметь дело с коллекциями и т. Д., И кто-то должен был сделать это раньше. Другой вариант - использовать сериализацию, я полагаю.

Кто-нибудь делал это раньше? Есть какой-нибудь код?

Ответы [ 2 ]

0 голосов
/ 04 июня 2009

Я бы взглянул на проект ELMAH . Он предназначен для ASP.NET, поэтому вы не сможете использовать его «из коробки» для проекта WinForms, но у него могут быть некоторые идеи, которые что-то зажгут.

0 голосов
/ 03 июня 2009

Вы можете использовать Reflection для вывода всех свойств Исключения, однако вы должны быть осторожны с чрезмерно сложным кодом регистрации / обработки исключений, так как исключение внутри вашего обработчика исключений, вероятно, оставит вас без полезной отладочной информации для отладки вашего оригинала. исключение. В частности, если вы собираетесь рекурсивно выводить любые не примитивные объекты этого исключения, подумайте, что произойдет, если у вас есть какие-либо циклические ссылки.

Обычно я просто использую ex.ToString () всякий раз, когда хочу записать все в журнал - он выглядит не очень красиво и может не содержать всех данных в исключении (если базовые классы не перегружены ToString () метод) однако я нахожу, вообще говоря, он содержит достаточно информации.

В качестве альтернативы, если вы имеете дело с пользовательскими исключениями, которые находятся под вашим контролем, вы, вероятно, найдете сериализацию лучшим решением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...