重定向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那样处理重定向在调试器中?任何想法如何防止这种情况?
答案 0 :(得分:1)
发现我的愚蠢错误。
调用异常过滤器,但由于应用程序在函数之后终止,因此数据仍然停留在流中并且永远不会被刷新。如果我添加
fflush(stderr);
在我的异常过滤器的末尾,实际上是写了东西。
很抱歉在发布之后再次弄清楚我的错误,但实际上这是一个问题,这让我误解了几个月而不是几个小时。