5

这主要是出于好奇,但在调试时,我经常看到这样一行:

MyApp.exe 中 0x7583812f 的第一次机会异常:Microsoft C++ 异常:CTBadSupportFileException 在内存位置 0x039be09c..

我想知道,为什么它被称为“微软”C++ 异常?

它真的是一个普通的 C++ 异常吗?它派生自哪个类?“Microsoft C++ 异常”是异常的类型,还是 CTBadSupportFileException 等异常派生的父类型?

为什么调试器会这样记录它们?

4

1 回答 1

12

这不是“微软”C++ 异常。这是一个“Microsoft C++”异常。

当函数引发操作系统异常时RaiseException,调用者指定异常代码。有一些标准异常代码,例如堆栈溢出的 0xC00000FD 或访问冲突的 0xC0000005。但您也可以引发自定义异常代码,Microsoft C++ 工具链针对所有 C++ 异常使用的自定义异常代码是 0xE06d7363。

请注意,操作系统异常和 C++ 异常是不同的概念。调试器中的消息正在谈论操作系统异常。

调试器对您有礼貌,而不是报告“异常 0xE06d7363”,而是说“Microsoft C++ 异常”,它甚至还为您采取了解码其参数的额外步骤。

于 2013-10-21T17:43:16.027 回答