UnhandledExceptionFilter не вызывается с перенаправленным выводом stderr - PullRequest
2 голосов
/ 16 мая 2011

У меня проблема с попаданием UnhandledExceptionFilter , установленного SetUnhandledExceptionFilter () при перенаправлении stderr.

Существует пользовательский фильтр исключений, установленный SetUnhandledExceptionFilter () , который должен записывать подробности об исключении, а также стек в stderr.Проблема в том, что он не работает, когда я перенаправляю вывод stderr в файл.Он даже не вызывается вообще.

Если я выполняю программу, используя

app.exe > log

, фильтр вызывается, но если я выполняю его так

app.exe 2> log

это не называется.Я уже попробовал другой подход, так как я вызываю рассматриваемое приложение из другой программы, используя system () .Я использовал _pipe () и _spawnvp () , чтобы перенаправить вывод и прочитать его из канала, но это не помогло.

Я начал изучать AddVectoredExceptionHandler () и, кажется, работает, но он вызывается для любого исключения, и я не знаю, как выяснить, как это работает с кодом try / catch, так как я просто хочу необработанные исключения.

Я уже знаю, что UnhandledExceptionFilter не вызывается, когда программа запускается в отладчике (http://support.microsoft.com/kb/173652/en-us),, но почему он обрабатывает перенаправление stderr, как этозапустить в отладчике? есть идеи как это предотвратить?

1 Ответ

1 голос
/ 17 мая 2011

Обнаружил мою глупую ошибку.

Фильтр исключений вызывается, но, поскольку приложение завершает работу после выполнения функции, данные все еще остаются в потоке и никогда не сбрасываются.Если я добавлю

fflush(stderr);

в конце моего фильтра исключений, материал действительно будет написан., это мучило меня месяцами, а не несколькими часами.

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