gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 13:10:10 25 4
gpt4 key购买 nike

当使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com