Windows 来自另一个进程的MiniTumpWriteUp
我想使用MiniDumpWriteDump为我的应用程序生成崩溃日志。Microsoft建议从另一个进程执行转储,这正是我试图做的。我遇到的问题是将Windows 来自另一个进程的MiniTumpWriteUp,windows,visual-c++,unhandled-exception,minidump,Windows,Visual C++,Unhandled Exception,Minidump,我想使用MiniDumpWriteDump为我的应用程序生成崩溃日志。Microsoft建议从另一个进程执行转储,这正是我试图做的。我遇到的问题是将PEXCEPTION\u信息结构从父进程传递到子进程。问题是父进程拥有这个结构的内存,我需要把它给子进程。我找到了这个帖子 被接受的答案是“指针在看门狗进程的上下文中无效并不重要。”这让我相信我可以简单地将未处理的异常过滤器接收到的PEXCEPTION\u信息指针传递给子进程,windows将从父进程读取它。这并没有发生,所以在子进程崩溃的那一刻,
PEXCEPTION\u信息
结构从父进程传递到子进程。问题是父进程拥有这个结构的内存,我需要把它给子进程。我找到了这个帖子
被接受的答案是“指针在看门狗进程的上下文中无效并不重要。”这让我相信我可以简单地将未处理的异常过滤器接收到的
PEXCEPTION\u信息
指针传递给子进程,windows将从父进程读取它。这并没有发生,所以在子进程崩溃的那一刻,我真的不知道该怎么办,大概是因为windows试图像访问子进程一样访问这个内存。我很明显在这里遗漏了什么,但我不确定是什么。我使用管道将数据发送到子进程,上面问题的答案是使用内存映射文件是可行的,但我不确定原因,或者我是否正确理解了答案。调试要转储的进程
typedef struct _EXCEPTION_POINTERS {
PEXCEPTION_RECORD ExceptionRecord;
PCONTEXT ContextRecord;
} EXCEPTION_POINTERS, *PEXCEPTION_POINTERS;
ExceptionRecord可以通过WaitforDebugEventEx从EXCEPTION_DEBUG_事件中获取
ContextRecord可以通过OpenThread和GetThreadContext从DebugEvent获得,threadid为那么当您尝试内存映射文件时发生了什么事?@HansPassant我没有尝试过它,因为我不确定要将哪个文件映射到内存,或者它真正的作用是什么。@用户:对此有任何更新吗。我试图使用文件映射来实现这一点,但类似的问题是传递异常信息。我在这里登陆说:“如果你使用共享内存,你就不能通过指针。指针将包含虚拟地址,它不同于一个进程到另一个进程。你必须根据共享内存区域的开始交换偏移值。”我被困在中间。我没有找到解决的办法。我能想到的唯一方法是对结构进行深度复制,但肯定有更简单的方法。