windows - 来自另一个进程的 MiniDumpWriteDump

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

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

How do I get at the exception information when using MiniDumpWriteDump out-of-process?

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

最佳答案

调试要转储的进程。

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

ExceptionRecord可以通过WaitforDebugEventEx从EXCEPTION_DEBUG_EVENT得到。

ContextRecord可以通过OpenThread和GetThreadContext从DebugEvent获取threadid

关于windows - 来自另一个进程的 MiniDumpWriteDump,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13934957/

相关文章:

windows - 从批处理文件中获取错误代码

windows - CreateMutex() 和 OpenMutex() 返回不同的句柄

c++ - 唯一指针内存泄漏

visual-c++ - 为什么 Visual C++ 版本号中有逗号而不是点

c++ - 确定数组分配的长度

c# - 使用 Polly 时 VS 调试器中报告的异常用户未处理

c++ - 为什么通过同一个 COM 对象的不同接口(interface)检索到的 IUnknown* 指针具有相同的值?

windows - 进程间通信(IPC)的例子

c++ - GetEnvironmentVariableA() 用法

c# - 在 .NET 中处理粗鲁的应用程序中止