[英]What can this Crashlytics iOS crash log mean?
我正在为我的iOS应用程序在Crashlytics中获取一些崩溃日志,我对如何解释它们感到难过。 我已经尝试了在我的应用程序中创建崩溃的所有内容,并且无法创建一个会导致堆栈跟踪的内容,如下所示:
Thread : Crashed: com.apple.main-thread
0 libobjc.A.dylib 0x397e6b26 objc_msgSend + 5
1 Foundation 0x2fcc7f8d -[NSError dealloc] + 60
2 libobjc.A.dylib 0x397f6b0b objc_object::sidetable_release(bool) + 174
3 Foundation 0x2fd241f5 -[NSFilesystemItemRemoveOperation dealloc] + 60
4 libobjc.A.dylib 0x397f6b0b objc_object::sidetable_release(bool) + 174
5 libobjc.A.dylib 0x397e8007 (anonymous namespace)::AutoreleasePoolPage::pop(void*) + 358
6 CoreFoundation 0x2f2de981 _CFAutoreleasePoolPop + 16
7 UIKit 0x31b1624d _wrapRunLoopWithAutoreleasePoolHandler + 36
8 CoreFoundation 0x2f3761cd __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 20
9 CoreFoundation 0x2f373b71 __CFRunLoopDoObservers + 284
10 CoreFoundation 0x2f373eb3 __CFRunLoopRun + 730
11 CoreFoundation 0x2f2dec27 CFRunLoopRunSpecific + 522
12 CoreFoundation 0x2f2dea0b CFRunLoopRunInMode + 106
13 GraphicsServices 0x34005283 GSEventRunModal + 138
14 UIKit 0x31b82049 UIApplicationMain + 1136
15 Pocket Linesman 0x000d5a8b main + 17 (main.m:17)
有谁知道如何解释这个堆栈跟踪的原因? 当我从文件系统中删除我的应用程序中的对象时,似乎发生了某些事情,但我并不是100%肯定。
我们可以在backtrace _CFAutoreleasePoolPop
看到。
这意味着当前运行循环的自动释放池试图释放标记为自动释放的对象时发生崩溃...
通常,这意味着手动释放自动释放的对象。
想象一下:
{
NSObject * o;
o = [ [ [ NSObject alloc ] init ] autorelease ];
[ o release ];
}
这里的o
对象的保留计数为1
,并标记为自动释放,因此自动释放池的当前实例将在下次耗尽时向其发送release
消息。
所以手动调用release
,这是错误的,不会产生崩溃,因为对象还在离开。 但是该对象将被释放,使自动释放池留下对已释放对象的引用。
当池耗尽时,它将尝试向该无效引用发送一条release
消息,您的应用程序将崩溃。
通过释放内部NSFilesystemItemRemoveOperation
,我猜你正在处理围绕NSFileManager
的removeItemAtPath:error:
有问题的内存管理removeItemAtPath:error:
。 您是否在代码中的任何位置进行此调用?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.