3

我有一个非常奇怪的情况。我正在运行由 Visual Studio 2010 用 C++ 编写的 IOCP 服务器程序。

它使用'minidump',所以当出现诸如指针滥用之类的逻辑错误时,程序会因转储文件而崩溃,因此我可以找出代码中的崩溃点在哪里。

有时(很少),程序崩溃并且没有转储文件。

什么情况下SetUnhandledExceptionFilter()不工作?有人知道这个问题吗?我想不通。

4

1 回答 1

3

好吧,您当然不知道,因为您没有要查看的小型转储。当 SetUnhandledExceptionFilter 回调触发时,您应该做绝对最小值。该过程处于危险状态。它崩溃了。锁可能会被持有,堆锁特别麻烦。你不能指望 MiniDumpWriteDump() 会成功。

您需要的是一个等待命名事件的小守护进程。尽早在您的 main() 函数中启动它并将您的进程 ID 传递给它。守卫进程等待该事件和您的进程句柄。在您的异常回调中,只需发出事件信号并立即休眠很长时间。这会唤醒守卫进程,它会调用 MiniDumpWriteDump() 以及让您了解崩溃的任何其他必要信息。并杀死你的主程序。

于 2012-05-20T10:00:16.117 回答