我有一个在几台设备上崩溃的iOS应用程序。考虑到在iTunes发生这种情况时我看到的糟糕评论,崩溃似乎在代码中的相同位置发生。使用GCD时在某些设备上发生故障
最后,一个好人实际上联系了我,而不仅仅是留下评论,他们甚至在为我安装使用TestFlight的应用程序的调试版时。
武装与崩溃报告中,我可以看到它深的地方发生的malloc:给定的行号
2 libSystem.B.dylib 0x34683d6e _sigtramp + 42
3 libSystem.B.dylib 0x3468c886 szone_malloc_should_clear + 2122
而且,它出现在我开始一个后台任务点发生:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
UIImage *image = [self loadImage:path];
dispatch_sync(dispatch_get_main_queue(), ^{
我不确定碰撞发生在那三条线中的哪条线上,所以目前还不清楚是否在GCD本身的调用中发生崩溃,就在块代码的开始处,或者块本身的某处。
堆栈跟踪结束在包含上面代码片段的函数中,而不是,看起来,在块本身。如果崩溃在异步模块中,堆栈跟踪是否仍将调用树包含在父函数中?我目前正在研究这样一个假设,即块内部崩溃的堆栈跟踪不会包含调用父函数(因为块在其自己的线程中异步执行),所以我认为这是对GCD的调用崩溃。
我试过使用TFLog来查找确切的故障时刻,但是根本没有记录日志。我知道日志调用是正确完成的,因为在我的开发设备上,我看到日志弹出在TestFlight记录器中,所以看起来崩溃扰乱了这个调试选项。
最后,TestFlight无法找到该用户使用的iPhone 4的iOS版本号 - 所以我想知道这是否是越狱设备,并且如果它可能可能会有效果? (我问过用户,但没有答案)。
请注意,这是所有的ARC代码,所以我很惊讶地发现这是一个内存管理问题。它也与一些设备隔离,但这些设备每次都会在同一时刻崩溃。
任何人都可以提供任何见解或调试建议(假设我自己没有崩溃设备)。
感谢,
添