【问题标题】:C++ - catch all exceptions?C++ - 捕获所有异常?
【发布时间】:2011-11-09 10:25:40
【问题描述】:

我想将一个 DLL 注入一个进程。一旦这个 DLL 在那里,它应该捕获并正确处理进程中发生的所有访问冲突异常。有没有办法做到这一点?

【问题讨论】:

  • 如何“正确处理”来自任意进程的访问违规?
  • 一些编译器允许你使用 catch(...) 作为包罗万象的方法。
  • @Chase 不处理访问冲突。这可能会有所帮助:stackoverflow.com/questions/457577/…
  • 这不是一个骗局——这不是微软,而这将是特定于 Windows 的。
  • @Seth 没错,它也不处理信号,如果你想制作一个包罗万象的 DLL,你可能会考虑“捕捉”。

标签: c++ exception dll exception-handling


【解决方案1】:

SetUnhandledExceptionFilter(function)怎么样?

函数的原型是:

LONG __stdcall ExceptionHandler(EXCEPTION_POINTERS *ExceptionInfo);

我已使用此功能创建故障转储等。

【讨论】:

    【解决方案2】:

    您可以使用结构化异常处理 (SEH) 来捕获此类异常。具体来说,this Windows 功能似乎是你想做的。

    【讨论】:

    • 我的理解是SEH在发生SEH注册的线程中捕获异常。当 DLL 主程序运行时,它当然可以为访问冲突注册一个处理程序(对于加载它的线程),但是您如何建议它也为进程中的任意其他线程注册处理程序?我认为这是不可能的。
    【解决方案3】:

    要完成收藏,也可以使用AddVectoredExceptionHandler

    【讨论】:

    • 刚刚意识到这就是 DeadMG 发布的内容... VEH != SEH
    【解决方案4】:

    在 XP 之前,您无法捕获所有异常。 XP 或更高版本,您应该使用AddVectoredExceptionHandler(1, handler),但不能保证您将始终是第一个向量化异常处理程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-23
      • 2010-09-21
      • 2011-08-20
      相关资源
      最近更新 更多