使用 llvm 2.0 编译器构建的 EXEC_BAD_ACCESS 导致临时测试崩溃

Posted

技术标签:

【中文标题】使用 llvm 2.0 编译器构建的 EXEC_BAD_ACCESS 导致临时测试崩溃【英文标题】:ad-hoc testing crashes with EXEC_BAD_ACCESS build with llvm 2.0 compiler 【发布时间】:2011-03-14 15:28:48 【问题描述】:

我将一个正在进行的项目从 Xcode 3 迁移到 Xcode 4。LLVM 2.0 编译器的临时构建在 iPod Touch 2G (ios 4.2.1) 上崩溃,但在 iPad (iOS 4.3) 上运行良好。这在迁移到 Xcode 4 之前从未发生过。

当我在设备上使用调试配置进行测试时,没有发生崩溃。 当我使用临时配置(从发布中复制)进行测试时,它会崩溃。 当我将临时配置中的编译器版本从“LLVM 2.0”切换到“LLVM GCC4.2”或“GCC 4.2”时,没有崩溃。

因此,我将“LLVM GCC 4.2”用于临时和发布配置作为一种解决方法。但我想知道崩溃的可能原因是什么。

我没有发布崩溃报告,因为它只是在线程 0 上崩溃,没有堆栈流。

【问题讨论】:

【参考方案1】:

请尝试 Xcode 4.0.2,其中包含针对 LLVM 编译器 2.0 的有针对性的错误修复,可纠正出现此类症状的问题。

谢谢!

-克里斯

【讨论】:

【参考方案2】:

我认为这与远程调试器无论出于何种原因未能连接到手机上的应用程序有关。您的 Xcode 3 项目是否有设置了 get-task-allow 的 Entitlements.plist?你在剥离调试符号吗?编译器优化?查看您设备的控制台日志中的管理器窗口,如果您确定没有其他代码问题,我敢打赌您会看到有关 com.apple.debugserver 的错误。

我也遇到过类似的情况,可能还没有完全解决。在我的“发布”方案中,使用 Ad-Hoc 构建配置,我告诉 Xcode 在运行时不要附加到 GDB,但我注意到它仍然试图附加远程调试器,这就是我认为它会立即崩溃的原因。崩溃后,我会在 Xcode 中停止当前正在运行的进程,然后从手机中手动启动已安装的应用程序,它运行正常。

这很可能不是您的应用程序的直接故障,而是您的项目、构建设置和远程调试器的完美风暴。尝试使用运行设置,也许您可​​以从中获得一些好处。

【讨论】:

我在 IDP 论坛上遇到了这个帖子:devforums.apple.com/thread/92279?start=0&tstart=0。好吧,看起来它的 LLVM 2.0 不好。【参考方案3】:

升级到 xCode 4.0.2 这就是您所需要的! 这是一个解释问题的有用链接:https://devforums.apple.com/thread/92279?start=50&tstart=0 (需要苹果账号)

【讨论】:

以上是关于使用 llvm 2.0 编译器构建的 EXEC_BAD_ACCESS 导致临时测试崩溃的主要内容,如果未能解决你的问题,请参考以下文章

LLVM 缺少链接器,无法编译 lld(llvm 链接器)

xcode 4.6 目标构建设置缺少“Apple LLVM 编译器 4.2 - ...”部分

Xcode的控制台调试命令

lldb调试命令

stm32如何使用llvm+clang编译

Xcode 5“缺少编译器规范 LLVM 4.2”错误