4

我正在使用TestFlight SDK并收到了几份与此相同的崩溃报告。但是,我无法理解它,崩溃的根本原因是什么?

Exception

SIGSEGV
2 libsystem_c.dylib 0x32862e92 _sigtramp + 42
3 Foundation 0x33750d1c -[NSError dealloc] + 60...

Exception reason

SIGSEGV

Stacktrace

0 MyAppName 0x0013faba testflight_backtrace + 382
1 MyAppName 0x00140708 TFSignalHandler + 264
2 libsystem_c.dylib 0x32862e92 _sigtramp + 42
3 Foundation 0x33750d1c -[NSError dealloc] + 60
4 libobjc.A.dylib 0x39230488 _ZN12_GLOBAL__N_119AutoreleasePoolPage3popEPv + 168
5 CoreFoundation 0x31de9440 _CFAutoreleasePoolPop + 16
6 Foundation 0x33751f7a -[NSAutoreleasePool drain] + 122
7 CoreData 0x35e0a4b2 -[NSManagedObjectContext save:] + 1210
8 MyAppName 0x000b7168 MR_swapMethodsFromClass + 18076
9 CoreData 0x35e0dbc0 developerSubmittedBlockToNSManagedObjectContextPerform + 88
10 libdispatch.dylib 0x335974b6 _dispatch_client_callout + 22
11 libdispatch.dylib 0x33598dca _dispatch_main_queue_callback_4CF$VARIANT$up + 226
12 CoreFoundation 0x31e79f3a __CFRunLoopRun + 1290
13 CoreFoundation 0x31decebc CFRunLoopRunSpecific + 356
14 CoreFoundation 0x31decd48 CFRunLoopRunInMode + 104
15 GraphicsServices 0x36e092ea GSEventRunModal + 74
16 UIKit 0x320db2f8 UIApplicationMain + 1120
17 MyAppName 0x00099122 main (main.m:17)
18 MyAppName 0x000990d7 start + 39

额外细节:

  • 用户报告此崩溃发生在应用启动后 1-2 秒
  • 该应用程序使用 Core Data 和MagicalRecord(这是 MR_swapMethodsFromClass 方法的来源)
  • 从运行各种 iOS 版本(iOS 5.1、6.0、6.1)的 Xcode(iPhone 3GS、iPhone 4 或 iPhone 5)运行时,我无法在任何测试设备上重现此问题

编辑

仍在努力解决这个问题......我已经能够重新创建它(但没有附加调试器)。

这是最奇怪的部分——如果用户拥有旧版本的应用程序并安装更新(通过 Test Flight 分发),他们会收到此错误。

但是,如果他们首先删除旧应用程序并安装更新,则不会发生错误。

4

2 回答 2

17

让我们来看看它:

0 MyAppName 0x0013faba testflight_backtrace + 382
1 MyAppName 0x00140708 TFSignalHandler + 264

那是TestFlight。这是在崩溃发生之后,所以这肯定不是原因。

2 libsystem_c.dylib 0x32862e92 _sigtramp + 42

这就是我们遇到崩溃的地方。“sigtramp”是信号“蹦床”。这是一种奇特的说法:“我捕捉到了一个信号(崩溃),现在我要跳到代码中的其他地方。”

3 Foundation 0x33750d1c -[NSError dealloc] + 60

啊。这个很重要。我们在释放NSError. 这意味着NSError过度释放或保留不足。

4 libobjc.A.dylib 0x39230488 _ZN12_GLOBAL__N_119AutoreleasePoolPage3popEPv + 168
5 CoreFoundation 0x31de9440 _CFAutoreleasePoolPop + 16
6 Foundation 0x33751f7a -[NSAutoreleasePool drain] + 122

可悲……它在排空自动释放池时表现出来。这意味着实际的错误可能离这里还有很长的路要走。但至少我们知道对象的类型。NSZombies 可用于尝试查找特定对象。

7 CoreData 0x35e0a4b2 -[NSManagedObjectContext save:] + 1210

在 MOC 保存期间,自动释放池正在耗尽。这表明它可能与您的核心数据代码有关。它至少是你首先看的地方。

要记住的事情是:

  • 该错误几乎肯定在您的代码中。
  • 如果它不在您的代码中,它可能在 Magical Record 中
  • 不要假设它在 Core Data 中。鉴于此堆栈,这是最不可能出现错误的地方。

这是最奇怪的部分——如果用户拥有旧版本的应用程序并安装更新(通过 Test Flight 分发),他们会收到此错误。

但是,如果他们首先删除旧应用程序并安装更新,则不会发生错误。

可能在您的升级代码中。最有可能在核心数据迁移的东西中。审核NSError该代码区域中的每次使用。消除所有编译器和分析器警告。如果它可重现,请尝试 NSZombies。

于 2013-06-05T01:38:59.203 回答
0

您应该尝试将模型版本添加到数据模型中。它对我有用,我有一个类似的魔法记录相关问题。

于 2013-06-07T10:43:01.593 回答