UnhandledExceptionFilter no llamado con salida stderr redirigida

Tengo problemas para golpear un UnhandledExceptionFilter establecido por SetUnhandledExceptionFilter () cuando el stderr está siendo redirigido.

Hay un filtro de excepción personalizado establecido por SetUnhandledExceptionFilter (), se supone que debe escribir detalles sobre la excepción, así como la pila en stderr. El problema es que no funciona cuando redirijo la salida de stderr a un archivo. Ni siquiera se llama en absoluto.

Si ejecuto el programa usando

app.exe > log

se llama al filtro, pero si lo ejecuto así

app.exe 2> log

no se llama. Ya probé un enfoque diferente ya que llamo a la aplicación en cuestión desde otro programa usando sistema(). solía _tubo() y _spawnvp () para redirigir la salida y leerla desde la tubería, pero eso no ayudó.

Comencé a buscar en AddVectoredExceptionHandler () y parece funcionar, pero se llama en cualquier excepción y no tengo idea de cómo se desarrolla esto con el código try / catch, ya que solo quiero las excepciones no controladas.

Ya soy consciente de que un UnhandledExceptionFilter no se llama cuando el programa se ejecuta en un depurador (http://support.microsoft.com/kb/173652/en-us), pero ¿por qué trata una redirección de stderr como si se ejecutara en un depurador? ¿Alguna idea de cómo prevenir esto?

preguntado el 16 de mayo de 11 a las 18:05

1 Respuestas

Encontré mi estúpido error.

Se llama al filtro de excepciones, pero dado que la aplicación finaliza después de la función, los datos aún están atascados en la secuencia y nunca se vacían. Si agrego

fflush(stderr);

al final de mi filtro de excepción, las cosas están realmente escritas.

Perdón por una vez más descubrir mi error poco después de publicarlo, pero esto es en realidad un problema, que me molestó durante meses y no solo unas pocas horas.

contestado el 17 de mayo de 11 a las 11:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.