当使用MiniDumpWriteDump函数在Windows上创建进程的核心转储时,建议(例如,这里和这里)从另一个“看门狗”进程运行MiniDumpWriteDump,因为在同一进程中调用它很可能无法工作。
目前,我们的应用程序正在对一个未处理的异常(我们通过一个看门狗线程)调用它。由于我们有时有问题,它不工作,我们想把它转移到一个单独的过程。
现在,给另一个进程发送开始写入转储的信号很简单(只需使用事件、信号量,您可以给它命名),但是如何将我为SetUnhandledExceptionFilter注册的回调函数获得的SetUnhandledExceptionFilter信息传递给另一个进程,以便将其传递给MiniDumpWriteDump的ExceptionParam参数?
发布于 2012-11-27 19:50:03
您还需要MINIDUMP_EXCEPTION_INFORMATION.ThreadId值。最简单的方法,也是我让它工作的方式,是使用一个内存映射文件来同时传输ThreadId和ExceptionPointers。还有一个被命名的事件来唤醒看门狗。指针在看门狗进程的上下文中无效并不重要。
在监视进程中使用CreateFileMapping + MapViewOfFile作为初始化的一部分,在看门狗中使用OpenFileMapping + MapViewOfFile。然后,SetUnhandledExceptionFilter应该只调用GetCurrentThreadId(),并将tid和pExcept复制到内存映射的文件视图中,调用SetEvent()来唤醒看门狗并永远阻塞,直到看门狗终止为止。
https://stackoverflow.com/questions/13590980
复制相似问题