3

我想使用 MiniDumpWriteDump 为我的应用程序生成崩溃日志。Microsoft 建议从另一个进程执行转储,这是我正在尝试做的。我遇到的问题是将PEXCEPTION_INFORMATION结构从父进程传递给子进程。问题是父进程拥有这个结构的内存,我需要把它交给孩子。我找到了这篇文章

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

并且接受的答案说“指针在看门狗进程的上下文中无效并不重要。” 这让我相信我可以简单地将PEXCEPTION_INFORMATION我的未处理异常过滤器接收到的指针传递给子进程,Windows 会从父进程中读取它。这没有发生,所以我真的不知道该怎么做,此时子进程崩溃,大概是因为 Windows 试图访问这个内存,就好像它属于孩子一样。我显然在这里遗漏了一些东西,但我不确定是什么。我使用管道将数据发送到子进程,上述问题的答案说使用内存映射文件有效,但我不确定为什么,或者我是否正确理解了答案。

4

1 回答 1

0

调试要转储的进程。

typedef struct _EXCEPTION_POINTERS {
    PEXCEPTION_RECORD ExceptionRecord;
    PCONTEXT ContextRecord;
} EXCEPTION_POINTERS, *PEXCEPTION_POINTERS;

ExceptionRecord 可以通过 WaitforDebugEventEx 从 EXCEPTION_DEBUG_EVENT 中获取。

ContextRecord 可以通过 OpenThread 和 GetThreadContext 以及来自 DebugEvent 的 threadid 获取

于 2019-04-18T07:24:41.250 回答