Подтвердить что ты не робот

Отчет об исключении из приложения WPF

Так что давайте скажем, что у меня случилось необработанное исключение в моем приложении или он по какой-то причине сбой. Есть ли способ захватить вывод и показать диалог отчета об ошибке при сбое приложения.

То, что я думаю, это небольшая программа, работающая в фоновом режиме, и только задание - прослушивать ненормальный выход из основного приложения, а затем показывать диалоговое окно "отчет", в котором пользователь может выбрать для отправки мне сообщения ошибки.

Не уверен, как это реализовать, или если это правильный способ сделать это.

Сообщение об ошибке было бы легкой задачей, но я понятия не имею, как захватить вывод необработанного исключения или захватить коды выхода (я предполагаю, что программа даст код выхода другой, а затем 0, когда он сработает).

Было бы здорово подтолкнуть в правильном направлении.

4b9b3361

Ответ 1

Ваш лучший шанс в приложении. Есть два крючка:

Правильное место для "catch-all" зависит от семантики вашего приложения и трудно сказать, куда вы должны положить его, не зная своего приложения. Приложение также должно установить Application.SetUnhandledExceptionMode.

Наличие наружной сторожевой собаки менее полезно, потому что она не может дать сколько-нибудь значимой информации, почему авария приложения. К моменту обнаружения "неожиданного" выхода (как он знает, "неожиданно"?) Слишком поздно собирать какую-либо полезную информацию. С помощью внутреннего обработчика вы можете собрать исключение и стек и отправить их в службу анализа, например bugcollect.com, а затем у вас будет но впереди в понимании только того, что произошло, но также, как часто это происходит и какое развертывание затронуто (где это происходит). Существуют и другие подобные сервисы, такие как exceptioneer.com или Отчеты об ошибках Windows (для этого требуется, чтобы ваш код был подписан сертификатом доверенного органа, таким как Verisign). Опираясь на услугу по сбору инцидентов, намного превосходит отправку почты, вы не хотите просыпаться и находите 2k инцидентов в вашем почтовом ящике и начинаете просеивать их, чтобы понять, что произошло.

И последний мир: не изобретайте колесо: уже есть много фреймворков для сбора и регистрации исключений, например log4net и elmah.

Ответ 2

Вы можете использовать NBug для библиотеки (также вы можете использовать пакет nuget здесь для простой установки). Просто установите пакет NuGet и настройте его, как показано ниже:

NBug.Settings.Destination1 =
  "Type=Mail;[email protected];[email protected];SmtpServer=smtp.mycompany.com;";
AppDomain.CurrentDomain.UnhandledException += NBug.Handler.UnhandledException;
Application.Current.DispatcherUnhandledException += NBug.Handler.DispatcherUnhandledException;

Теперь все необработанные исключения будут приятно пойманы и поданы для вас, и вы получите полную информацию об исключении по электронной почте. Используйте инструмент "Конфигуратор", чтобы убедиться, что ваша конфигурация верна.

Ответ 3

Вы должны обработать событие Application.ThreadException.