2011-01-26 150 views
28

难以在iPad应用程序中追踪崩溃。这个困难真的源于应用程序失败时不存在错误或堆栈跟踪的事实。它简直就像凯泽泽泽一样消失,“就这样,噗,他走了。”iOS崩溃无错误或堆栈跟踪

我已经在模拟器和设备上复制了崩溃。有零个设备日志,没有在控制台等

我知道,在崩溃期间一些CoreGraphics操作在后台线程发生。通常,三个左右的NSOperations正在踢一些图像混合。

共混由CGContext上*调用(的DrawImage,SetBlendMode,SetAlpha等)。 NSOperation回调到主线程中的委托来处理图像并将其设置为UIImage,因此它不应该成为UI主线程冲突,但我在这一点上不打折扣任何东西。

是否有一些Xcode技巧我失踪,以确切地发生了什么事?或者至少可以更好地了解问题所在?

编辑我已经运行在仪器跟踪内存使用情况的应用程序,并认为它是非常摇滚2MB左右稳定。所以,不要认为这是一个记忆问题。但经过考虑,这块稳定的2MB似乎异常低下。 Instruments有没有机会拿起CoreGraphics的配置?

+1

我从来没有做过任何iOS *开发*,但是当iOS应用程序开始崩溃时(并且没有留下任何日志),它最终成为一个内存不足的问题:关闭所有应用程序并重新启动设备清除了所有内容。 – Ken 2011-01-26 21:44:32

+0

@Ken - 添加了一个与低内存相关的编辑。谢谢。 – MarkPowell 2011-01-26 21:50:42

+0

确保您不只是运行该应用程序,而是调试它。要验证,请确保断点处于打开状态。 – 2011-01-26 21:57:42

回答

9

由于缺乏一个更好的解决办法,如果不是很明显,辣椒NSLogs您的应用程序循环,即发生这种情况,然后通过断点和/或其他日志钻从那里更深。

16

试着读取寄存器。

每当我的应用程序崩溃,没有错误,在大多数情况下,我发现在寄存器除外。

首先去例外选项卡和“添加例外断点”使用+在左下角。 enter image description here

然后,当应用程序崩溃的 “0 objc_exception_throw” 点击下线程1 enter image description here

最后,在控制台输入:

  • 寄存器读取 (你应该得到的寄存器列表)
  • po $ rax(通常情况下是'rax')

    (你应该在控制台上看到异常输出)

希望这有助于。

2

超级晚的答案,但我发现,使用的try/catch有助于使信息时,我不能让一个堆栈跟踪和我的应用程序拉扯科泽尔Soze。

@try 
{ 
    // suspected code causing crash/errors 
} 
@catch (NSException *exception) 
{ 
    NSLog(@"Exception: %@", exception); 
} 
0

在我的情况下,这是由于一个对象被释放。通常它会说消息发送到释放实例或类似的东西,但它没有。我检查了iPhone的日志,发现这个:KERN_INVALID_ADDRESS,我GOOGLE了并碰到这个:KERN_INVALID_ADDRESS

启用僵尸对象,发现我试图使用一个释放实例。它还告诉我事后在日志里是什么东西。

希望它有助于未来的游客。

1

就我而言,这是因为我在计划中启用了“僵尸对象”,以帮助查找问题,最终导致它耗尽内存并崩溃。

1

就我而言,这是因为故事板中的插座连接不良。 如果viewDidLoad要加载的方法UIViewController被调用,使用断点检查。如果没有,请检查故事板中的插座连接。

不正确的连接使应用程序崩溃而没有任何错误或堆栈跟踪。

我很想知道旧版本的XCode中显示的this class is not key value coding-compliant for the key错误是怎么回事。