2013-03-04 43 views
0

我們在libdispatch內部函數中發生了一次奇怪的崩潰,經過數小時的研究,我們不知道發生了什麼。GCD中的SIGABRT與iOS 6.1

的碰撞痕跡:

Incident Identifier: 7A5CBCD8-28A3-4AC5-937A-D5BA69A64B67 
CrashReporter Key: [TODO] 
Hardware Model:  iPhone5,2 
Process:   Memoir Dev [6973] 
Path:   /Users/USER/Memoir Dev.app/Memoir Dev 
Identifier:  com.veri.memoir-enterprise 
Version:   0.9.191 
Code Type:  ARM 
Parent Process: launchd [1] 

Date/Time:  2013-03-03 20:55:42 +0000 
OS Version:  iPhone OS 6.1.2 (10B146) 
Report Version: 104 

Exception Type: SIGABRT 
Exception Codes: #0 at 0x3ae66350 
Crashed Thread: 1 

Thread 0: 
0 libsystem_kernel.dylib    0x3ae55e30 _mach_msg_trap + 20 
1 CoreFoundation      0x000972bb __CFRunLoopServiceMachPort + 131 
2 CoreFoundation      0x00095fdb __CFRunLoopRun + 819 
3 CoreFoundation      0x32bc823d _CFRunLoopRunSpecific + 357 
4 CoreFoundation      0x32bc80c9 _CFRunLoopRunInMode + 105 
5 GraphicsServices     0x367a633b _GSEventRunModal + 75 
6 UIKit        0x34ae42b9 _UIApplicationMain + 1121 
7 Memoir Dev       0x0002a0d7 main (main.m:20) 

Thread 1 Crashed: 
0 libsystem_kernel.dylib    0x3ae66350 ___pthread_kill + 8 
1 libsystem_c.dylib     0x3ae1936b _abort + 95 
2 libsystem_c.dylib     0x3adb212d _free + 361 
3 libdispatch.dylib     0x000088d1 _dispatch_kevent_register + 169 
4 libdispatch.dylib     0x00007e91 _dispatch_source_kevent_register + 33 
5 libdispatch.dylib     0x00008957 _dispatch_timer_list_update + 27 
6 libdispatch.dylib     0x00006b81 _dispatch_mgr_invoke + 389 
7 libdispatch.dylib     0x00002378 _dispatch_mgr_thread + 36 

Thread 2: 
0 libsystem_kernel.dylib    0x3ae55e30 _mach_msg_trap + 20 

[...] 

我們的代碼和情景一點背景:

  • 我們使用廣泛NSOperations和GCD將數據上傳到我們的服務器
  • 的崩潰似乎發生在應用程序在後臺上傳,在10分鐘內
  • 崩潰開始發生在使用iOS 6.1(10B143)的feb/9左右,只是fe在我們從6.0.2升級到6.1之後的w天
  • 到現在爲止,我們可以在iOS 6.1.2(10B146)中重現它,但不在6.0.1(10A523)中
  • 關於SIGABRT異常類型,正在調用'abort'函數(實際上,'free'由'dispatch_kevent_register'調用)

您是否有任何人知道在iOS 6.1及更高版本中是否存在GCD中的任何已知問題?

回答

2

這是免費的()由於過程中的堆損壞而中止。

調度管理器線程是打到abort()的線程可能是附帶的(回溯指示它醒來異步安裝新的調度計時器源,malloc當時檢測到損壞)。

您可能希望嘗試使用GuardMalloc運行(請參閱XCode計劃編輯器中的診斷選項卡),當發生損壞事件時,更有可能爲您提供崩潰點。

或者,各種malloc調試環境變量可以幫助追蹤罪魁禍首,c.f. malloc環境(3)