当我的进程出现异常时,我有代码可以输出一个小型转储,但我想将该代码移动到父进程,这样一个进程就不会破坏另一个进程。
(1.)如何从包装进程中监听子进程崩溃,以及(2.)编写一个小型转储结果?
C++ 似乎是包装程序最自然的语言选择,但 .NET 对我来说也是一种选择(我的应用程序是混合 C#/C++)。
据我所知,只有两种方法可以做到这一点。一种是使用调试 API 来“调试”子进程并在遇到异常时编写一个小型转储。我从未尝试过,但我听说它可能会导致问题,因为调试器 API 并不是真的打算以这种方式使用。
另一种是提前在父子进程之间建立通信通道,然后在子进程中注册一个未处理的异常过滤器,通知父进程写一个minidump。Firefox 和 Chrome 都使用此方法通过 Breakpad 库对其子进程进行异常处理。如果您想使用 Breakpad,那么您将在父进程中使用CrashGenerationServer类,并在子进程中使用ExceptionHandler 构造函数,该构造函数将管道名称或管道句柄作为与 CrashGenerationServer 的通信通道的另一端.