c++ - 进程外使用MiniDumpWriteDump时如何获取异常信息?

标签 c++ windows visual-c++ unhandled-exception minidump

当使用 MiniDumpWriteDump 函数在 Windows 上创建进程的核心转储时,建议(例如 herehere )从另一个“看门狗”运行 MiniDumpWriteDump进程,因为在同一进程中调用时它可能无法正常工作。

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

现在,向其他进程发出信号以开始写入转储是微不足道的(只需使用一个事件、信号量,随便你怎么说)但是我如何传递我为回调函数获得的 LPEXCEPTION_POINTERS 信息使用 SetUnhandledExceptionFilter 注册到其他进程,以便它可以传递给 MiniDumpWriteDumpExceptionParam 参数??

最佳答案

您还需要 MINIDUMP_EXCEPTION_INFORMATION.ThreadId 值。最简单的方法,也是我让它工作的方法,是使用内存映射文件来传输 ThreadId 和 ExceptionPointers。以及唤醒看门狗的命名事件。指针在看门狗进程的上下文中无效并不重要。

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

关于c++ - 进程外使用MiniDumpWriteDump时如何获取异常信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13590980/

相关文章:

c++ - 矩阵的相关系数

c++ - Visual C++ 和 C++ 之间有什么主要区别吗?

c++ - 类模板状态数据成员,而不是可以显式特化的实体

c++ - 绘图应用程序 - 绘图无效不起作用

c++ - 在 xCode 上安装 SDL2

windows - 如果 Steam 可以映射 Xbox 360 Controller 上的指南按钮,为什么我不能

windows - 低完整性到中/高完整性管道安全描述符

c++ - 类内部定义的静态结构的静态成员的编译时默认值

c++ - int* const* foo(int x);是一个有效的 C 函数原型(prototype)。你怎么 "read"这个返回类型?

windows - 在批处理文件上传递参数