【发布时间】:2014-04-28 04:56:12
【问题描述】:
在 Windows 应用程序中,如果您有向量异常处理程序:
LONG WINAPI VectoredExceptionHandler(PEXCEPTION_POINTERS exception)
{
}
...并像这样添加它...
AddVectoredExceptionHandler(1, VectoredExceptionHandler);
如果调用了处理程序,您将获得有关异常的上下文信息,例如异常代码exception->ExceptionRecord->ExceptionCode 和异常信息exception->ExceptionRecord->ExceptionInformation。您如何将这些信息转换为字符串类型(例如 TCHAR),告诉用户发生的确切问题是什么?例如,如果您要使用 WINAPI 方法编写一个 mini-dump,MiniDumpWriteDump 编写一个转储文件,它会在转储文件中显示如下详细信息:
异常代码:0xC0000005
异常信息:线程试图读取或写入 它没有适当访问权限的虚拟地址。
我可以很容易地转换异常代码,但是您如何获得如此详细的异常信息? exception->ExceptionRecord->ExceptionInformation,在我的环境中是 ULONG_PTR(运行此应用程序的 Windows 8.1 x64 内置于发布/x64 平台/多字节字符集)当我将它写到 tstringstream 时看起来像这样:0000000000A2DF80
【问题讨论】:
-
您可以通过调用FormatMessage获取异常代码的文字描述。
标签: c++ winapi exception visual-c++ exception-handling