代码之家  ›  专栏  ›  技术社区  ›  uray

C++ Win32未处理异常处理程序

  •  3
  • uray  · 技术社区  · 16 年前

    目前我使用 SetUnhandledExceptionFilter() EXCEPTION_RECORD 它提供 ExceptionAddress .

    例外地址 是它是给出异常的函数/代码的地址,还是某个函数试图访问的内存地址?

    [2] 有没有更好的机制可以在发生未处理的异常时为我提供更好的信息(我不能使用调试模式,也不能添加任何影响运行时性能的代码,因为崩溃是很少见的,而且只有在代码以尽可能快的速度运行时才会发生)

    有一个地址,我在基址加载并执行了DLL X A-x ,以及其他一些动态链接库 A+y ,假设撞车是 可能 由DLL X上的代码引起的?

    3 回复  |  直到 16 年前
        1
  •  5
  •   shoosh    16 年前

    (1) 那个 ExceptionAddress 是导致异常的代码的地址。如果出现访问冲突错误( 0xC0000005

    (2) 不。另外,向发布版本添加调试信息不会影响性能。你可以验证一下,自己看看。

    (3) dbghelp.dll 提供一个完整的库来调查崩溃。在他们中间有 StackWalk64

    (4) 呼叫 GetModuleHandleEx 例外地址 引起 ". 一个dll中发生的崩溃可能是完全不同且不相关的dll中的错误造成的。

        2
  •  0
  •   Alex F    16 年前

    不是直接回答你的问题,但可能这就是你需要的: http://www.codeproject.com/KB/debug/postmortemdebug_standalone1.aspx

    事后调试是在客户端计算机上以发行版运行程序时查找异常位置的方法。

        3
  •  0
  •   nabulke    16 年前

    另外,这不是对你问题的直接回答,但我认为它可以帮助你:

    http://www.codeproject.com/KB/applications/blackbox.aspx

    它将产生一个可读的输出到屏幕或文件,这将给您一个堆栈输出,以找到异常发生的位置以及其他有用的信息。

    还有一个名为“黑盒修订版”的改进版本。但现在找不到网站。