Visual studio 未使用重定向的stderr输出调用未处理的ExceptionFilter

Visual studio 未使用重定向的stderr输出调用未处理的ExceptionFilter,visual-studio,visual-c++,exception,exception-handling,piping,Visual Studio,Visual C++,Exception,Exception Handling,Piping,重定向stderr时,我遇到问题,无法命中由SetUnhandledExceptionFilter()设置的UnhandledExceptionFilter SetUnhandledExceptionFilter()设置了一个自定义异常筛选器,该筛选器将向stderr写出有关异常以及堆栈的详细信息。问题是,当我将stderr输出重定向到一个文件中时,它不起作用。它甚至连名字都没有 如果我使用 app.exe > log 过滤器被调用,但是如果我这样执行它 app.exe 2> lo

重定向stderr时,我遇到问题,无法命中由SetUnhandledExceptionFilter()设置的UnhandledExceptionFilter

SetUnhandledExceptionFilter()设置了一个自定义异常筛选器,该筛选器将向stderr写出有关异常以及堆栈的详细信息。问题是,当我将stderr输出重定向到一个文件中时,它不起作用。它甚至连名字都没有

如果我使用

app.exe > log
过滤器被调用,但是如果我这样执行它

app.exe 2> log
它不叫。我已经尝试了另一种方法,因为我使用system()从另一个程序调用了有问题的应用程序。我使用\u pipe()\u spawnvp()重定向输出并从管道中读取,但这没有帮助

我开始研究AddVectoredExceptionHandler(),它似乎可以工作,但在任何异常情况下都会调用它,我不知道如何使用try/catch代码,因为我只需要未处理的异常


我已经知道,当程序在调试器()中运行时,UnhandledExceptionFilter不会被调用,但是为什么它会像在调试器中运行一样对待stderr的重定向呢?有没有办法防止这种情况发生?

发现了我的愚蠢错误

调用异常过滤器,但由于应用程序在函数完成后终止,因此数据仍然卡在流中,并且永远不会刷新。如果我加上

fflush(stderr);
在我的异常过滤器的末尾,实际上写的是东西

很抱歉在发布后不久又一次发现了我的错误,但这实际上是一个问题,它困扰了我好几个月,而不仅仅是几个小时