【问题标题】:What can this Crashlytics iOS crash log mean?这个 Crashlytics iOS 崩溃日志是什么意思?
【发布时间】:2014-01-19 05:07:07
【问题描述】:

我在 Crashlytics 中为我的 iOS 应用程序获取了一些崩溃日志,我不知道如何解释它们。我已经在我的应用程序中尝试了所有我能想到的方法来创建崩溃,但无法创建会导致如下堆栈跟踪的崩溃:

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% 确定。

【问题讨论】:

    标签: ios debugging stack-trace crashlytics


    【解决方案1】:

    我们可以在回溯中看到_CFAutoreleasePoolPop

    这意味着当当前运行循环的自动释放池试图释放一个标记为自动释放的对象时发生了崩溃......

    通常,这意味着手动释放了自动释放的对象。
    想象一下:

    {
        NSObject * o;
    
        o = [ [ [ NSObject alloc ] init ] autorelease ];
    
        [ o release ];
    }
    

    这里的o 对象的保留计数为1,并标记为自动释放,因此自动释放池的当前实例将在下次耗尽时向其发送release 消息。

    因此,手动调用 release 是错误的,不会导致崩溃,因为对象仍在离开。但是该对象随后将被释放,从而使自动释放池具有对已释放对象的引用。

    当池耗尽时,它会尝试向该无效引用发送release 消息,您的应用将崩溃。

    【讨论】:

      【解决方案2】:

      由于内部NSFilesystemItemRemoveOperation 被释放,我猜你正在处理NSFileManagerremoveItemAtPath:error: 周围的内存管理问题。您是否在代码中的任何位置进行此调用?

      【讨论】:

      • 我没有使用 removeItemAtPath,但我在我的应用程序中使用了 NSFileManager,并且我确实在某一时刻调用了“removeItemAtURL”。
      • 我建议您查看该特定代码,也许在其上运行静态分析器,看看您是否遇到@Macmade 演示的双重发布问题
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多