【发布时间】:2011-12-14 14:03:05
【问题描述】:
我有一个应用程序在设备上崩溃(在模拟器中运行良好),这让我认为这可能是内存问题...
当它崩溃时,控制台中不会报告任何消息。
它不会在每次执行特定操作时崩溃,它总是在应用程序运行并使用一段时间后在不同的时间点崩溃。
我知道我应该问一个更具体的问题 - 但如果有人能够告诉我从哪里开始尝试追踪未在控制台中报告的崩溃,我将不胜感激!
我现在使用的是最新版本的 XCode (4.2)
提前谢谢...
【问题讨论】:
我有一个应用程序在设备上崩溃(在模拟器中运行良好),这让我认为这可能是内存问题...
当它崩溃时,控制台中不会报告任何消息。
它不会在每次执行特定操作时崩溃,它总是在应用程序运行并使用一段时间后在不同的时间点崩溃。
我知道我应该问一个更具体的问题 - 但如果有人能够告诉我从哪里开始尝试追踪未在控制台中报告的崩溃,我将不胜感激!
我现在使用的是最新版本的 XCode (4.2)
提前谢谢...
【问题讨论】:
这很可能是内存问题。如果您想从那里开始诊断,您可以使用内置的 Xcode 分析器。在 Xcode Product->Profile 中会让你开始。
【讨论】:
也许在 Project -> Edit Active Executable -> Arguments -> Variables 中将 NSZombiesEnabled 值设置为 YES 也有帮助;这将根据访问释放的对象向您显示内存访问错误。但在这种情况下,您至少应该得到一个 SIG_ABRT 或 BAD_ACCESS 错误...
您还可以在应用程序在您的视图控制器的 didReceiveMemoryWarning 函数中收到内存警告时进行记录 - 当内存不足时系统在抛出内容之前调用此函数。这当然可能会导致崩溃而没有任何显示。
【讨论】:
首先,放松。
然后阅读此Technical Note。 现在,请按照以下步骤操作:
/Users/<username>/Library/Developer/Xcode/DerivedData 删除所有文件夹。/Users/<username>/Library/Application Support/iPhone Simulator 删除所有文件夹。现在,转到XCode->Window->Organizer 并从“设备”窗格中选择您的设备"Device Logs"。选择其中最新的具有您的应用程序名称的。等待 XCode 到 symbolicate the crashlog。现在有两种可能:
如果是选项一,请在 Instruments 中分析您的应用程序。
如果是选项二,您应该看到应用程序崩溃的堆栈帧(或模块的堆栈)。 This SO question will be very helpful
如果您无法理解输出(或者您认为崩溃日志没有象征意义 - 或者崩溃的不是您的代码),请在此处发布崩溃日志的崩溃线程堆栈,我会对其进行调查。
PS:在第一部分中,我们执行前两个步骤以确保没有剩余的 .app/.dSYM 文件,因为 XCode 符号化器没有那么智能,这可能会阻碍稍后的符号化。
【讨论】: