Как прочитать исключение, переданное в качестве второго параметра в Environment.FailFast ()? - PullRequest
0 голосов
/ 11 октября 2019

Документация MSDN для FailFast (вторая перегрузка) упоминание:

Немедленно завершает процесс после записи сообщения в журнал событий приложений Windows, а затем включает сообщение и исключение информация в отчете об ошибках в Microsoft.

Мой контекст - это приложение службы Windows, имеющее общий блок try / catch, использующий NLog для регистрации ошибки, а затем вызовите Environment.FailFast (сообщение ex) для принудительного завершения процесса.

Моя цель NLog успешно распечатала исключение, а Windows Event Viewer - нет. У меня есть сообщение и стек вызовов, ведущий к FailFast (куча бесполезного универсального стека Task / MoveNext), но НЕ стек вызовов исключения, переданного в качестве второго параметра.

private static void FailFast(string message, Exception exception)
{
    try
    {
        Log.Fatal(message, exception);
        NLog.LogManager.Shutdown();
    }
    finally
    {
        if (!Debugger.IsAttached)
            Environment.FailFast(message, exception);
    }
}

Итак, у меня есть тестфункция, которая генерирует NotSupportedException со строковым тестом и передает «Failed to start» как сообщение в моем блоке try / catch, вызывающее мой метод FailFast.

Что регистрируется в NLog:

Failed to start.
System.NotSupportedException: test
   at Application.Host.test()
   at Application.Host.<Start>d__5.MoveNext()

Что регистрируется в средстве просмотра событий Windows (не обращайте внимания на строку «test» или функцию test ()):

Application: Application.exe
Framework Version: v4.0.30319
Description: The application requested process termination through System.Environment.FailFast(string message).
Message: Failed to start.
Stack:
   at System.Environment.FailFast(System.String, System.Exception)
   at Application.FailFast(System.String, System.Exception)
   at Application.Host+<Start>d__5.MoveNext()
   at System.Runtime.CompilerServices.AsyncTaskMethodBuilder.Start[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]](System.__Canon ByRef)
   at Application.Host.Start()
   at Application.Program+<Main>d__0.MoveNext()
   at System.Runtime.CompilerServices.AsyncTaskMethodBuilder.Start[[System.__Canon, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]](System.__Canon ByRef)
   at Application.Program.Main(System.String[])
   at Application.Program.<Main>(System.String[])

1 Ответ

0 голосов
/ 11 октября 2019

Как упоминалось @Damien_The_Unbeliever, отчеты об ошибках Microsoft (WER) не совпадают с функцией просмотра событий. Вы можете просмотреть список отчетов, отправленных в Microsoft, набрав «Просмотреть все отчеты о проблемах» в меню «Пуск» или выбрав:

Панель управления \ Все элементы панели управления \ Безопасность и обслуживание \ Отчеты о проблемах

Оттуда вы можете прочитать тип исключения, вызвавшего ошибку (в моем случае NotSupportedException), но не стек вызовов.

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