什么是“Microsoft C++异常”?

5

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

在MyApp.exe中0x7583812f处发生了一次“Microsoft C++异常:CTBadSupportFileException”,内存位置为0x039be09c。

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

它真的是普通的C++异常吗?它从哪个类派生?"Microsoft C++ Exception"是异常的类型,还是像CTBadSupportFileException这样的异常从中派生的父类型?

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


我的猜测是它在谈论“Microsoft C++”,即通过MS编译器编译的C++,而不是“Microsoft exception”。但这只是一个猜测。 - lethal-guitar
@lethal-guitar,我刚刚检查了一下,你是对的!我抛出了一个std::runtime_error异常,它被报告为“在MyApp.exe中0x7583812f处的第一次机会异常:Microsoft C++异常:std::runtime_error在内存位置0x0012dcc0处。”谢谢! - sashoalm
首次机会异常的描述在以下链接中:http://blogs.msdn.com/b/davidklinems/archive/2005/07/12/438061.aspx - Adrian Lis
1个回答

13

这不是一个“Microsoft”的C++异常,而是一个“Microsoft C++”异常。

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

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

调试器为您提供了便利,而不是报告“异常0xE06d7363”,它说“Microsoft C ++异常”,并且甚至采取额外步骤解码其参数


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接