在重定向 stderr 时,遇到由SetUnhandledExceptionFilter()设置的UnhandledExceptionFilter的问题。
SetUnhandledExceptionFilter()设置了一个自定义异常过滤器,它应该将有关异常的详细信息以及堆栈写入 stderr。问题是,当我将 stderr 输出重定向到文件时它不起作用。它甚至根本没有被调用。
如果我使用执行程序
app.exe > log
过滤器被调用,但如果我像这样执行它
app.exe 2> log
它没有被调用。我已经尝试了一种不同的方法,因为我使用system()从另一个程序调用了有问题的应用程序。我使用_pipe()和_spawnvp()来重定向输出并从管道中读取它,但这并没有帮助。
我开始研究AddVectoredExceptionHandler()并且它似乎可以工作,但是它在任何异常上都会被调用,我不知道如何弄清楚它是如何与 try/catch 代码一起使用的,因为我只想要未处理的异常。
我已经知道,当程序在调试器(http://support.microsoft.com/kb/173652/en-us )中运行时不会调用UnhandledExceptionFilter,但是为什么它会像对待 stderr 的重定向一样在调试器中运行?任何想法如何防止这种情况?