XCode 6.3立即在抛出的Objective-C++异常上引发SIGABRT

Oha*_*der 7 objective-c xcode6

考虑以下目标-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;
}
Run Code Online (Sandbox Code Playgroud)

在XCode 6.2中,它按预期工作(记录"错误消息").但是,由于我们升级到6.3,抛出的line(throw std::logic_error...)会引发SIGABRT(堆栈跟踪只包含_cxa_throw_pthread_kill超出applicationdidFinishLaunchingWithOptions)并使应用程序崩溃.

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

我已经尝试指定-fexceptions并且 -fnon-call-exceptions无效(相同的行为).

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

更新2 我们将其缩小到UserVoice iOS SDK.只需通过链接就可以清楚地在新的vanilla项目中显示该行为(确保调用某个方法以便进行链接).我们还没有调查该库中究竟是什么导致了它,我们还有一些内部库引发相同的行为(但它们应该与微软以外的任何人无关).

Oha*_*der 0

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