C++ 在进程外使用MiniTumpWriteDomainp时,如何获取异常信息?

C++ 在进程外使用MiniTumpWriteDomainp时,如何获取异常信息?,c++,windows,visual-c++,unhandled-exception,minidump,C++,Windows,Visual C++,Unhandled Exception,Minidump,当使用MiniDumpWriteDump函数在Windows上创建进程的核心转储时,建议(例如和)从另一个“看门狗”进程运行MiniDumpWriteDump,因为从同一进程中调用它可能无法工作 目前,我们的应用程序正在对一个未处理的异常进行进程内调用(我们从一个看门狗线程进行调用)。因为我们有时会遇到它不工作的问题,所以我们希望将它转移到一个单独的流程 现在,向另一个进程发送开始写入转储的信号是很简单的(只要使用一个事件、信号量,你就知道了)但是如何将我为我注册的回调函数获取的LPEXCEPT

当使用MiniDumpWriteDump函数在Windows上创建进程的核心转储时,建议(例如和)从另一个“看门狗”进程运行
MiniDumpWriteDump
,因为从同一进程中调用它可能无法工作

目前,我们的应用程序正在对一个未处理的异常进行进程内调用(我们从一个看门狗线程进行调用)。因为我们有时会遇到它不工作的问题,所以我们希望将它转移到一个单独的流程


现在,向另一个进程发送开始写入转储的信号是很简单的(只要使用一个事件、信号量,你就知道了)但是如何将我为我注册的回调函数获取的
LPEXCEPTION\u指针
info
SetUnhandledExceptionFilter
传递给另一个进程,以便它可以传递给
minidumpWriteDomainp
s
ExceptionParam
参数???

您还需要MINIDUMP\u EXCEPTION\u INFORMATION.ThreadId值。最简单的方法,也是我让它工作的方法,是使用内存映射文件来传输ThreadId和exceptionpointer。和一个叫醒看门狗的命名事件。指针在看门狗进程上下文中无效并不重要


在监视进程中使用CreateFileMapping+MapViewOfFile作为其初始化的一部分,在监视程序中使用OpenFileMapping+MapViewOfFile。然后,SetUnhandledExceptionFilter应该只调用GetCurrentThreadId()并将tid和PEExcept复制到内存映射文件视图,调用SetEvent()唤醒看门狗并永久阻止,直到看门狗终止它。

“指针在看门狗进程的上下文中无效并不重要。”。。。啊!!这个信息很重要。谢谢你。我想我得实施一下,看看能不能让它发挥作用。@martinba:这方面有什么更新吗?如何进一步进行?我也有类似的要求,我被困在中间。您是如何传递异常数据的?通过管道或文件映射?@ananth:我使用了一个文件映射:
CreateFileMapping(无效的\u HANDLE\u VALUE/*表示由页面文件*支持的共享内存,NULL,page\u READWRITE,…
(尽管名称
Create…
,但您可以使用此fn来创建和打开文件映射。)@Martin Ba:我正在使用相同的方法,但我在传递异常指针和信息时遇到了麻烦。如果您能帮助处理这部分代码,那就太好了。@Martin Ba:更具体地说,我也理解“指针在看门狗进程的上下文中无效并不重要。”并按原样传递指针,导致无法创建迷你转储。迷你转储\异常\信息(这是一个am共享)为0。