Mar*_* Ba 7 c++ windows minidump unhandled-exception visual-c++
当使用MiniDumpWriteDump函数在Windows上创建进程的核心转储时,建议(例如此处和此处)MiniDumpWriteDump从另一个"监视程序"进程运行,因为在同一进程中调用它时可能无法正常工作.
目前,我们的应用程序正在对未处理的异常进行调用(我们是从监视程序线程执行的).由于我们有时会遇到无法正常工作的问题,因此我们希望将其移至单独的流程中.
现在,发信号通知其他进程开始编写转储是微不足道的(只需使用一个事件,信号量,你可以命名)但是如何将我LPEXCEPTION_POINTERS为我注册的回调函数获得的信息传递SetUnhandledExceptionFilter给另一个进程以便它可以传递给MiniDumpWriteDumps ExceptionParam参数?
您还需要MINIDUMP_EXCEPTION_INFORMATION.ThreadId值.最简单的方法,以及我使其工作的方式是使用内存映射文件来传输ThreadId和ExceptionPointers.唤醒看门狗的命名事件.指针在监视程序进程的上下文中无效并不重要.
在监视进程中使用CreateFileMapping + MapViewOfFile作为其初始化的一部分,看门狗中的OpenFileMapping + MapViewOfFile.然后你的SetUnhandledExceptionFilter应该只调用GetCurrentThreadId()并将tid和pExcept复制到内存映射文件视图,调用SetEvent()来唤醒看门狗并永远阻塞,直到看门狗终止它.