创建一个监视器来捕获minidump

时间:2013-10-22 18:58:36

标签: c++ winapi watchdog minidumpwritedump

我正在尝试在程序崩溃时添加捕获迷你转储的功能。从我读过的内容来看,最好通过使用另一个用于托管实际应用程序的应用程序(看门狗)并执行转储来实现。

通过查看this等帖子,我得到了以下内容(App和WatchDog都是使用Win32在C ++中实现的):

  • 当监视程序启动时,它会创建2个事件,一个 ExitedOk 事件和一个异常事件,这两个事件都设置为可继承且不是'发出信号。它还会创建一个可继承的文件映射。

  • 看门狗然后启动“真实应用”,并在 WaitOnMultipleObjects 中等待 ExitedOk 例外发出信号

  • 当应用启动时,它会创建相同的2个事件(它将继承句柄)

  • 应用程序配置为如果退出正常,则表示 ExitedOk ,或者如果发生未处理的异常,则使用继承的文件映射存储异常/线程信息,信号例外,然后睡觉(无限)。

  • 如果看门狗中的WaitOnMultipleObjects通过 ExitedOk 发出信号,则表示没有任何反应。如果用 Exception 发出信号,则它使用filemapping读取异常/线程信息,然后调用MiniDumpWriteDump。

显然Sleep()是一个问题。这是通过另一个事件最好解决的吗?应用程序等待看门狗发出一些“FinishedCreatingDump”事件?

其次,我认为看门狗的全部意义是你在崩溃的过程中没有做任何可能不稳定的工作?如果我正确地理解了工作流程,并确实在实际崩溃的过程中确实需要SetEvent / OpenFileMapping / MapViewOfFile,那就不像从它调用MiniDumpWriteDump那么糟糕吗?

0 个答案:

没有答案