XCode 6.3立即在抛出的Objective-C+上引发SIGABRT+;例外情况

XCode 6.3立即在抛出的Objective-C+上引发SIGABRT+;例外情况,objective-c,xcode6,Objective C,Xcode6,考虑以下objective-C++代码 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { try { throw std::logic_error("error message"); } catch (const std::exception& ex)

考虑以下objective-C++代码

- (BOOL)application:(UIApplication *)application
        didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    try
    {
        throw std::logic_error("error message");
    }
    catch (const std::exception& ex)
    {
        NSLog(@"%s", ex.what());
    }
    return YES;
}
在XCode 6.2中,它按预期工作(“错误消息”被记录)。但是,自从我们升级到6.3之后,抛出行(
throw std::logic_error…
)将引发
SIGABRT
(堆栈跟踪仅包含
\u cxa_throw
\u pthread_kill
超出
applicationdFinishLaunchwithoptions
)并使应用程序崩溃

这只发生在我们的应用程序中——当我将完全相同的代码复制到一个新项目中时,一切都很好,即使使用相同的编译器标志

我试图指定
-feexceptions
-fnon-call exceptions
但没有效果(相同的行为)

更新 这似乎只发生在32位模拟器上(它在实际设备和64位模拟器上工作)

更新2
我们把范围缩小到了最低限度。在一个新的香草项目中,只需对其进行链接即可清楚地显示该行为(确保调用某种方法,以便进行链接)。我们还没有调查该库中到底是什么导致了它,我们还有一些内部库引发了同样的行为(但它们应该与Microsoft以外的任何人都无关)。

我发现6.3中充满了严重的错误。升级到6.3.2似乎解决了我所有的问题。试一试。

显然,这个问题是一个(特别是链接器)。据报道,它是在XCode 6.4b3中修复的。我使用的是6.4(6E35b),事实上它似乎已经解决了。

调试版和发布版的情况相同吗?您可以查看编译器的输出,看看它是否在6.2和6.3之间匹配吗?这可能至少表明它是运行时而不是编译器。还要添加一个catch(…)以查看是否正在捕获something@KirkSpaziani在调试和发布中都是一样的。编译器的输出只是说libc++abi.dylib:std::logic_error:error message类型的未捕获异常终止(显然,这一行在6.2中没有出现,因为异常被正确捕获)。添加
catch(…)
没有什么区别。您是否使用了框架/cocoapod?e、 g.事故处理人员?只是你的应用程序和一个普通的老式应用程序之间的差异缺乏细节,而且你还没有真正尝试使用objective-C++
@catch
,根据文档,它应该能更好地工作(至少在最新版本中)捕获C++异常只是测试了6.3.2,恐怕这个问题没有解决。据我从apple开发者论坛线程()中所知,它只会在6.4中得到解决。