如何在C++/Windows中捕获每个异常

How to catch EVERY exception in C++/Windows?

本文关键字:异常 Windows C++      更新时间:2023-10-16

我有一个DLL,它被注入到非常旧的、有缺陷的中,现在它的开发人员应用程序不支持它。有时该应用程序会崩溃,我需要一些方法来捕捉所有未处理的异常(来自DLL),这些异常可能会发生以保存数据,然后才允许应用程序崩溃。我怎样才能做到这一点?

目前,有一个用于此目的的外部调试器,但它太慢了,而且有缺陷,无法保持这种状态。

您必须启动一个承载DLL的新进程。如果DLL要崩溃,不管你喜欢与否,它都会导致进程中断。当然,您可以尝试捕获异常或类似的东西,但如果抛出异常,则意味着内存已损坏。与其让程序在不一致的状态下继续运行,不如灾难性地崩溃。

windows shell是一个真正做到这一点的程序——它在代理进程中启动一些插件,这样,如果插件崩溃,就不会导致整个shell崩溃。您需要使用进程间通信来在自己和启动的代理之间进行通信。