在进程外使用MiniDumpWriteDump时,如何获取exception信息?

当使用MiniDumpWriteDump函数在Windows上创build进程的核心转储时,build议(例如这里和这里 )从另一个“看门狗”进程运行MiniDumpWriteDump因为在同一进程中调用MiniDumpWriteDump

目前,我们的应用程序正在调用它在一个未处理的exception(我们从看门狗线程)。 由于我们有时会遇到问题而无法正常工作,因此我们希望将其移至单独的进程。

现在,指示其他进程开始写转储是微不足道的(只是使用事件,信号量,你的名字),但我怎么通过LPEXCEPTION_POINTERS信息我得到的callback函数我注册SetUnhandledExceptionFilter到另一个进程,所以它可以传递给MiniDumpWriteDumpExceptionParam参数

您还需要MINIDUMP_EXCEPTION_INFORMATION.ThreadId值。 最简单的方法,我做的工作方式是使用内存映射文件来传递ThreadId和ExceptionPointers。 还有一个叫醒的看门狗。 指针在看门狗进程的上下文中无效无关紧要。

在监视过程中使用CreateFileMapping + MapViewOfFile作为其初始化的一部分,在看门狗中使用OpenFileMapping + MapViewOfFile。 然后你的SetUnhandledExceptionFilter只调用GetCurrentThreadId()并将tid和pExcept复制到内存映射的文件视图中,调用SetEvent()来唤醒看门狗并永远阻塞,直到看门狗终止。