应用程序在设备上崩溃,但 XCode 没有注册崩溃

Posted

技术标签:

【中文标题】应用程序在设备上崩溃,但 XCode 没有注册崩溃【英文标题】:App crashes on device but XCode doesn't register a crash 【发布时间】:2011-12-24 22:13:33 【问题描述】:

我的设备已插入,我正在通过 XCode 运行我的应用程序。 在某个时刻,应用程序在设备上崩溃并退出到主屏幕。但是,Xcode 仍将应用程序显示为“正在运行”,我可以选择单击“停止”——它没有变灰。控制台不会打印错误消息,设备日志也不会保存崩溃日志。

我需要修复崩溃,但没有错误消息,我很难找到问题所在。我已经在代码的关键区域放置了NSLog 语句,但还没有进一步弄清楚导致崩溃的原因。

有人知道 XCode 不知道我的应用程序已经崩溃并且仍然将应用程序显示为“正在运行”的奇怪事实吗?

【问题讨论】:

【参考方案1】:

为了帮助您解决问题的调试部分,您可以在构建设置中将“Strip Debug Symbols”设置为“No”:

然后您将能够在管理器窗口的“设备日志”部分看到符号化的崩溃日志:

【讨论】:

谢谢 - 我将值设置为否,但我没有收到 XCode 未将其识别为崩溃的崩溃日志。【参考方案2】:

如果应用已签署分发,X-Code 无法调试它。在设备上启动应用会导致 X-Code 无法获取进程 ID。

您仍然可以通过管理器 -> 设备 -> 控制台获取日志消息(和其他控制台消息,希望包括崩溃信息)。

如果您的应用已为开发签名而这仍然是一个问题,那么您有一个更深层次的问题导致 X-Code 认为您的应用无法启动。查看您的应用程序初始化需要多长时间;我遇到了加载时间 > 10 秒导致 X-Code 没有获得进程 ID 但应用仍在运行的问题。

更糟糕的情况,疯狂地加载 NSLog 消息,安装应用程序并运行它直到它崩溃。然后立即加载管理器,转到设备,下载控制台,然后查找任何崩溃日志。

祝你好运!

【讨论】:

【参考方案3】:

我有同样的问题,应用程序崩溃,没有任何日志或错误。我的错误与“objc_msgSend”有关。

要找出您的错误 - 从 Xcode Navigator 窗口(左侧窗口)中选择“Show the Debug Navigator”。我的应用在第一行的线程 1 中显示“objc_msgSend”。

所以我在谷歌上搜索了“objc_msgSend”,发现这个崩溃是由于内存错误而发生的。这意味着消息已发送到已被释放的接收者。

要跟踪此错误,请使用“NSZombieEnabled 环境变量”

    在 Xcode 中,单击产品 -> 方案 -> 编辑方案。 从“运行方案”配置中,转到“诊断”选项卡。 在“内存管理”下,选中“启用僵尸对象”旁边的复选框。

现在,运行您的应用程序并重新生成崩溃,这一次您将在控制台上找到崩溃报告。

*** -[WSAddressViewController respondsToSelector:]: message sent to deallocated instance 0x1683d1b0

【讨论】:

【参考方案4】:

你是否不小心在行上设置了断点?

禁用或删除断点。

【讨论】:

以上是关于应用程序在设备上崩溃,但 XCode 没有注册崩溃的主要内容,如果未能解决你的问题,请参考以下文章

应用程序崩溃,但没有设备日志

设备上的应用程序崩溃,但适用于模拟器 iOS

没有存档的 Xcode 符号

iOS应用在闪屏时崩溃,Xcode Organizer崩溃报告上没有堆栈痕迹[已关闭] 。

在构建成功后,在安装/导入文本文件到物理设备时Xcode崩溃(RangeException)

Xcode 更新到 4.6 后应用程序在设备上崩溃