Documentación de MSDN para FailFast (segunda sobrecarga) mencione:

Termina inmediatamente un proceso después de escribir un mensaje al Registro de eventos de la aplicación de Windows y luego incluye el mensaje y información de excepción en el informe de errores a Microsoft.

Mi contexto es una aplicación de servicio de Windows que tiene un bloque try / catch genérico que usa NLog para registrar el error, luego llama a Environment.FailFast (mensaje, ex) para finalizar forzosamente el proceso.

Mi destino NLog imprime la excepción correctamente, pero el Visor de eventos de Windows no. Tengo el mensaje y la pila de llamadas que conduce a FailFast (grupo de pila genérica inútil Task / MoveNext), pero NO la pila de llamadas de la excepción pasada como segundo parámetro.

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

Así que tengo una función de prueba que lanza una NotSupportedException con una prueba de cadena, y pasa "No se pudo iniciar" como el mensaje en mi bloque try / catch llamando a mi método FailFast.

Lo que se registra en NLog:

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

Qué se registra en el Visor de eventos de Windows (no note ninguna mención de la cadena de "prueba" o la función de prueba ()):

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[])
0
Dunge 11 oct. 2019 a las 17:29

1 respuesta

La mejor respuesta

Como mencionó @Damien_The_Unbeliever, el informe de errores de Microsoft (WER) no es lo mismo que el Visor de eventos. Puede ver la lista de informes enviados a Microsoft escribiendo "Ver todos los informes de problemas" en el menú de inicio o en:

Panel de control \ Todos los elementos del panel de control \ Seguridad y mantenimiento \ Informes de problemas

Desde allí, puede leer el tipo de excepción que desencadenó el error (en mi caso, NotSupportedException), pero no la pila de llamadas.

0
Dunge 11 oct. 2019 a las 18:57