2

在重定向 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 的重定向一样在调试器中运行?任何想法如何防止这种情况?

4

1 回答 1

1

发现了我的愚蠢错误。

异常过滤器被调用,但是由于应用程序在函数之后终止,数据仍然停留在流中并且永远不会被刷新。如果我添加

fflush(stderr);

在我的异常过滤器的最后,这些东西实际上是写的。

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

于 2011-05-17T07:29:34.017 回答