我有一个非常奇怪的情况。 我运行由Visual Studio 2010中的C ++编程IOCP服务器程序。
它使用“转储”,所以当有像指针误操作的逻辑错误,与转储文件的程序崩溃,所以我可以找出是代码的崩溃点。
有时(很少),程序崩溃,并且没有转储文件。
什么场合让SetUnhandledExceptionFilter()
不工作? 任何人都知道这个问题? 我想不通。
我有一个非常奇怪的情况。 我运行由Visual Studio 2010中的C ++编程IOCP服务器程序。
它使用“转储”,所以当有像指针误操作的逻辑错误,与转储文件的程序崩溃,所以我可以找出是代码的崩溃点。
有时(很少),程序崩溃,并且没有转储文件。
什么场合让SetUnhandledExceptionFilter()
不工作? 任何人都知道这个问题? 我想不通。
好了,你当然不知道,因为你没有一个小型转储看看。 你应该做的绝对最低的SetUnhandledExceptionFilter回调触发时。 这个过程是一个危险的状态。 它坠毁。 锁可能会举行,堆锁是特别麻烦。 你不能指望MiniDumpWriteDump()接替。
你需要的是一个小后卫的过程,在一个指定的事件等待。 启动它,尽可能早地在你的main()函数,并将它传递的进程ID。 防护进程等待两个该事件和你的进程句柄。 在你的异常回调,只是信号的事件,并立即睡了很长一段时间。 这唤醒防护进程,它调用MiniDumpWriteDump()加上任何其他有必要让你知道崩溃。 并杀死你的主程序。