2011-10-25 146 views
0

我有一个应用程序在设备上崩溃(在模拟器中运行良好),这导致我认为这可能是内存问题...崩溃 - 从哪里开始?

当它崩溃时,控制台中没有报告任何消息。

每次执行某个操作时它都不会崩溃,它会在应用程序运行并使用一段时间后始终在不同的时间点崩溃。

我知道我应该问一个更具体的问题 - 但是如果有人能够告诉我从哪里开始试图追踪不在控制台中报告的崩溃,我会非常感激!

我现在使用最新版本的XCode(4.2)

感谢提前...

回答

2

它非常井可能是内存问题。如果这是您要开始诊断的位置,则可以使用内置的Xcode分析器。在Xcode产品 - >配置文件会让你开始。

0

也许NSZombiesEnabled值设置为YES 项目 - >编辑主动可执行文件 - >参数 - >变量还帮助;这会根据访问发布的对象向您显示内存访问错误。但在这种情况下,你至少应该得到一个SIG_ABRT或BAD_ACCESS错误...

您也可以登录时,应用程序接收的didReceiveMemoryWarning内存警告视图控制器功能 - 之前的系统是这个被称为内存不足时扔掉东西。这当然可能导致没有任何显示的崩溃。

0

首先,放松一下。

然后阅读这个Technical Note。 现在,请按照下列步骤操作:

  1. /Users/<username>/Library/Developer/Xcode/DerivedData删除所有文件夹。
  2. /Users/<username>/Library/Application Support/iPhone Simulator删除所有文件夹。
  3. 清理垃圾。
  4. 从设备中删除应用程序。
  5. 在设备上构建并运行应用程序。
  6. 按照导致崩溃的步骤操作。

现在,转到XCode->Window->Organizer并从DEVICES窗格中选择"Device Logs"您的设备。选择最近的这些应用程序的名称。等待XCode到symbolicate the crashlog。现在有两种可能性:

  1. 它的低内存崩溃。
  2. 其内存管理相关崩溃。

如果它的选项之一,在您的仪器中描述您的应用程序。

如果它的选项二,你应该看到应用程序崩溃的堆栈帧(或你的模块的堆栈)。 This SO question will be very helpful

如果你不能理解输出(或者你认为crashlog不是符号化的 - 或者它不是你的代码崩溃),请将崩溃日志的崩溃线程堆栈放在这里,我会研究它。

PS:在第一部分中,我们执行前两个步骤,以确保没有剩余的.app/.dSYM文件,因为XCode symbolicator不是那么聪明,所以可能会在后面的流程中阻碍符号化。