【发布时间】:2010-11-25 12:52:05
【问题描述】:
我有一些使用非常标准异常模式的 C++ 代码:
try {
// some code that throws a std::exception
}
catch (std::exception &e) {
// handle the exception
}
问题是异常没有被捕获,我不知道为什么。
代码编译为 OS X 中的静态库(通过 Xcode)。该库链接到 Cocoa 应用程序,通过 Objective-C++ thunk 调用相关函数。我怀疑 Objective-C 和 C++ 之间的相互作用是罪魁祸首,但我所有试图确定这一点的尝试都失败了。
我无法创建一个在简单示例中重现此行为的简单示例。当我将相关代码从我的大程序的上下文中取出时,一切正常。
谁能指出为什么我的异常没有被捕获?
【问题讨论】:
-
你有什么证据让你认为抛出了异常?你有什么证据表明它来自
std::exception? (不是说你错了,但这里明显缺乏信息) -
对于从搜索中找到此内容的任何人,还要检查 (a) this other thread 和 (b) 您的
throw没有埋在嵌套函数调用中,其中外部调用的权限较小异常规范,包括noexcept。如果正确指定了抛出函数,但它被noexcept函数(或不抛出被抛出的东西的函数)调用,则调用者将终止。这可能是基本的,但它只花了我几分钟的时间,所以!
标签: c++ objective-c exception-handling