【问题标题】:How to catch EVERY exception in C++/Windows?如何在 C++/Windows 中捕获每个异常?
【发布时间】:2011-05-27 03:46:06
【问题描述】:

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

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

【问题讨论】:

标签: c++ winapi exception-handling dll-injection


【解决方案1】:

您必须启动一个承载 DLL 的新进程。如果 DLL 将要崩溃,它会降低进程,无论你喜欢与否。当然,您可以尝试捕获异常或类似的东西,但如果抛出异常,则意味着内存已损坏。 It is better to crash catastrophically than to have the program continuing to run in an inconsistent state.

windows shell 是一个实际执行此操作的程序——它在代理进程中启动一些插件,因此如果插件崩溃,它不会关闭整个 shell。您需要使用进程间通信在您自己和您开始的代理之间进行通信。

【讨论】:

  • 对不起,我想让主应用程序在崩溃前保存数据,而不是防止它崩溃。
  • @uber:“保存数据”就是“继续运行”——你怎么知道崩溃的组件没有破坏你想要保存的数据? (毕竟,野指针可以覆盖您自己的数据)当您的用户发现您的程序崩溃现在已经破坏了他们在磁盘上的工作时,他们肯定会不高兴。
  • 工作被销毁从来都不是一件好事,无论是在磁盘上还是在内存中。你想尽可能地节省。这里有两种简单的技术:尽早保存、经常保存以及不要将工作副本保存在原始文档之上。
猜你喜欢
  • 2021-05-23
  • 1970-01-01
  • 2011-01-26
  • 1970-01-01
  • 1970-01-01
  • 2011-07-02
  • 2020-11-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多