Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 来自另一个进程的MiniTumpWriteUp_Windows_Visual C++_Unhandled Exception_Minidump - Fatal编程技术网

Windows 来自另一个进程的MiniTumpWriteUp

Windows 来自另一个进程的MiniTumpWriteUp,windows,visual-c++,unhandled-exception,minidump,Windows,Visual C++,Unhandled Exception,Minidump,我想使用MiniDumpWriteDump为我的应用程序生成崩溃日志。Microsoft建议从另一个进程执行转储,这正是我试图做的。我遇到的问题是将PEXCEPTION\u信息结构从父进程传递到子进程。问题是父进程拥有这个结构的内存,我需要把它给子进程。我找到了这个帖子 被接受的答案是“指针在看门狗进程的上下文中无效并不重要。”这让我相信我可以简单地将未处理的异常过滤器接收到的PEXCEPTION\u信息指针传递给子进程,windows将从父进程读取它。这并没有发生,所以在子进程崩溃的那一刻,

我想使用MiniDumpWriteDump为我的应用程序生成崩溃日志。Microsoft建议从另一个进程执行转储,这正是我试图做的。我遇到的问题是将
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我没有尝试过它,因为我不确定要将哪个文件映射到内存,或者它真正的作用是什么。@用户:对此有任何更新吗。我试图使用文件映射来实现这一点,但类似的问题是传递异常信息。我在这里登陆说:“如果你使用共享内存,你就不能通过指针。指针将包含虚拟地址,它不同于一个进程到另一个进程。你必须根据共享内存区域的开始交换偏移值。”我被困在中间。我没有找到解决的办法。我能想到的唯一方法是对结构进行深度复制,但肯定有更简单的方法。