iOS 应用程序在后台发生奇怪的崩溃

标签 ios objective-c core-data background crash

我需要帮助。

我正在开发一个用 Objective-c 编写的旧 iOS 应用程序。它于 2014 年发布,现在我已将项目迁移到 Xcode 8。迁移后一切都按预期工作,除了应用程序在后台时发生奇怪的崩溃(不是立即而是在一段时间后)。很难调试,因为只有当设备与 Xcode 断开连接时才会发生崩溃。我检查了设备日志,似乎是核心数据崩溃:

Incident Identifier: BDD70C46-6573-44A7-85AB-620E6FBA207F
CrashReporter Key:   c04f591f9e0cc9d1991ce10e33ebcabd56affbe6
Hardware Model:      iPhone8,4
Process:             myApp [17746]
Path:                /private/var/containers/Bundle/Application/878DB803-1DA5-46D7-8B50-655D43A5C28D/myApp.app/myApp
Identifier:          com.example.myApp
Version:             2 (1.0.2)
Code Type:           ARM-64 (Native)
Role:                Foreground
Parent Process:      launchd [1]
Coalition:           com.example.myApp [16959]


Date/Time:           2017-09-19 14:34:57.1435 +0300
Launch Time:         2017-09-19 14:31:38.0853 +0300
OS Version:          iPhone OS 10.3.3 (14G60)
Report Version:      104

Exception Type:  EXC_CRASH (SIGKILL)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note:  EXC_CORPSE_NOTIFY
Termination Reason: Namespace <0xF>, Code 0x8badf00d
Triggered by Thread:  0

Filtered syslog:
None found

Thread 0 name:  Dispatch queue: SQLQueue 0x100724310 for myApp.sqlite
Thread 0 Crashed:
0   libsqlite3.dylib                0x000000018f36d818 0x18f361000 + 51224
1   libsqlite3.dylib                0x000000018f36c9a4 0x18f361000 + 47524
2   libsqlite3.dylib                0x000000018f36c9a4 0x18f361000 + 47524
3   libsqlite3.dylib                0x000000018f36c2c4 0x18f361000 + 45764
4   libsqlite3.dylib                0x000000018f36bf24 0x18f361000 + 44836
5   CoreData                        0x000000019113e0b0 -[NSSQLiteConnection prepareSQLStatement:] + 468
6   CoreData                        0x000000019125f178 -[NSSQLiteConnection updateRow:forRequestContext:] + 492
7   CoreData                        0x0000000191307f28 _writeChangesForSaveRequest + 1128
8   CoreData                        0x0000000191309584 _executeSaveChangesRequest + 388
9   CoreData                        0x00000001912ff5f0 -[NSSQLSaveChangesRequestContext executeRequestUsingConnection:] + 44
10  CoreData                        0x00000001912170c4 __52-[NSSQLDefaultConnectionManager handleStoreRequest:]_block_invoke + 256
11  libdispatch.dylib               0x0000000100455a10 0x100454000 + 6672
12  libdispatch.dylib               0x00000001004625bc 0x100454000 + 58812
13  CoreData                        0x0000000191216f64 -[NSSQLDefaultConnectionManager handleStoreRequest:] + 208
14  CoreData                        0x00000001912d9824 -[NSSQLCoreDispatchManager routeStoreRequest:] + 272
15  CoreData                        0x000000019124475c -[NSSQLCore dispatchRequest:withRetries:] + 236
16  CoreData                        0x0000000191240578 -[NSSQLCore processSaveChanges:forContext:] + 200
17  CoreData                        0x0000000191144f10 -[NSSQLCore executeRequest:withContext:error:] + 724
18  CoreData                        0x000000019122384c __65-[NSPersistentStoreCoordinator executeRequest:withContext:error:]_block_invoke + 3492
19  CoreData                        0x000000019121c0f0 -[NSPersistentStoreCoordinator _routeHeavyweightBlock:] + 276
20  CoreData                        0x0000000191144adc -[NSPersistentStoreCoordinator executeRequest:withContext:error:] + 408
21  CoreData                        0x000000019116597c -[NSManagedObjectContext save:] + 2548
22  myApp                   0x00000001000cd0dc 0x1000c0000 + 53468
23  myApp                   0x00000001000cbc24 0x1000c0000 + 48164
24  CoreLocation                    0x00000001970ee828 0x1970de000 + 67624
25  CoreLocation                    0x00000001970edfcc 0x1970de000 + 65484
26  CoreLocation                    0x00000001970e11d8 0x1970de000 + 12760
27  CoreFoundation                  0x000000018ee1930c __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 20
28  CoreFoundation                  0x000000018ee18b28 __CFRunLoopDoBlocks + 288
29  CoreFoundation                  0x000000018ee16e1c __CFRunLoopRun + 1884
30  CoreFoundation                  0x000000018ed46da4 CFRunLoopRunSpecific + 424
31  GraphicsServices                0x00000001907b1074 GSEventRunModal + 100
32  UIKit                           0x0000000195001c9c UIApplicationMain + 208
33  myApp                   0x00000001000e4574 0x1000c0000 + 148852
34  libdyld.dylib                   0x000000018dd5559c start + 4

Thread 1 name:  Dispatch queue: BKSProcessAssertionClient
Thread 1:
0   libsystem_kernel.dylib          0x000000018de47224 mach_msg_trap + 8
1   libsystem_kernel.dylib          0x000000018de4709c mach_msg + 72
2   libdispatch.dylib               0x000000010046d37c 0x100454000 + 103292
3   libdispatch.dylib               0x000000010046d780 0x100454000 + 104320
4   libxpc.dylib                    0x000000018df60edc xpc_connection_send_message_with_reply_sync + 196
5   BaseBoard                       0x000000019095a944 -[BSXPCMessage sendSynchronouslyToConnection:error:] + 76
6   BaseBoard                       0x0000000190957148 -[BSBaseXPCClient _sendMessage:withReplyHandler:waitForReply:waitDuration:] + 436
7   AssertionServices               0x00000001909a17c4 -[BKSProcessAssertionClient _assertionQueue_sendEvent:forMessageType:responseHandler:] + 136
8   AssertionServices               0x00000001909a0f78 -[BKSProcessAssertionClient sendCreateAssertion:] + 108
9   AssertionServices               0x00000001909a0968 -[BKSProcessAssertion _clientQueue_acquireAssertion] + 312
10  libdispatch.dylib               0x0000000100455a50 0x100454000 + 6736
11  libdispatch.dylib               0x0000000100455a10 0x100454000 + 6672
12  libdispatch.dylib               0x00000001004632e8 0x100454000 + 62184
13  libdispatch.dylib               0x0000000100459634 0x100454000 + 22068
14  libdispatch.dylib               0x0000000100465630 0x100454000 + 71216
15  libdispatch.dylib               0x000000010046539c 0x100454000 + 70556
16  libsystem_pthread.dylib         0x000000018df2b100 _pthread_wqthread + 1096
17  libsystem_pthread.dylib         0x000000018df2acac start_wqthread + 4

Thread 2 name:  Dispatch queue: com.apple.CoreLocation.ConnectionClient.0x17013b6c0.events
Thread 2:
0   libsystem_kernel.dylib          0x000000018de47278 semaphore_timedwait_trap + 8
1   libdispatch.dylib               0x000000010047f238 0x100454000 + 176696
2   libdispatch.dylib               0x0000000100467db8 0x100454000 + 81336
3   CoreLocation                    0x00000001970e1078 0x1970de000 + 12408
4   CoreLocation                    0x00000001970e6118 0x1970de000 + 33048
5   CoreLocation                    0x00000001970e5f18 0x1970de000 + 32536
6   CoreLocation                    0x0000000197131e88 0x1970de000 + 343688
7   CoreLocation                    0x000000019712e4f0 0x1970de000 + 328944
8   CoreLocation                    0x000000019712e414 0x1970de000 + 328724
9   CoreLocation                    0x000000019712fa80 0x1970de000 + 334464
10  libxpc.dylib                    0x000000018df5f84c _xpc_connection_call_event_handler + 68
11  libxpc.dylib                    0x000000018df5d358 _xpc_connection_mach_event + 1448
12  libdispatch.dylib               0x0000000100455ae0 0x100454000 + 6880
13  libdispatch.dylib               0x00000001004599d8 0x100454000 + 23000
14  libdispatch.dylib               0x0000000100463128 0x100454000 + 61736
15  libdispatch.dylib               0x0000000100458da0 0x100454000 + 19872
16  libdispatch.dylib               0x0000000100463128 0x100454000 + 61736
17  libdispatch.dylib               0x0000000100459634 0x100454000 + 22068
18  libdispatch.dylib               0x0000000100463128 0x100454000 + 61736
19  libdispatch.dylib               0x0000000100459634 0x100454000 + 22068
20  libdispatch.dylib               0x0000000100464358 0x100454000 + 66392
21  libdispatch.dylib               0x000000010046c57c 0x100454000 + 99708
22  libsystem_pthread.dylib         0x000000018df2afbc _pthread_wqthread + 772
23  libsystem_pthread.dylib         0x000000018df2acac start_wqthread + 4

Thread 3 name:  com.apple.uikit.eventfetch-thread
Thread 3:
0   libsystem_kernel.dylib          0x000000018de47224 mach_msg_trap + 8
1   libsystem_kernel.dylib          0x000000018de4709c mach_msg + 72
2   CoreFoundation                  0x000000018ee18e90 __CFRunLoopServiceMachPort + 192
3   CoreFoundation                  0x000000018ee16ae4 __CFRunLoopRun + 1060
4   CoreFoundation                  0x000000018ed46da4 CFRunLoopRunSpecific + 424
5   Foundation                      0x000000018f861db4 -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 304
6   Foundation                      0x000000018f882b84 -[NSRunLoop(NSRunLoop) runUntilDate:] + 96
7   UIKit                           0x000000019598b830 -[UIEventFetcher threadMain] + 136
8   Foundation                      0x000000018f95f318 __NSThread__start__ + 996
9   libsystem_pthread.dylib         0x000000018df2d68c _pthread_body + 240
10  libsystem_pthread.dylib         0x000000018df2d59c _pthread_body + 0
11  libsystem_pthread.dylib         0x000000018df2acb4 thread_start + 4

Thread 4:
0   libsystem_pthread.dylib         0x000000018df2aca8 start_wqthread + 0

Thread 5 name:  com.apple.NSURLConnectionLoader
Thread 5:
0   libsystem_kernel.dylib          0x000000018de47224 mach_msg_trap + 8
1   libsystem_kernel.dylib          0x000000018de4709c mach_msg + 72
2   CoreFoundation                  0x000000018ee18e90 __CFRunLoopServiceMachPort + 192
3   CoreFoundation                  0x000000018ee16ae4 __CFRunLoopRun + 1060
4   CoreFoundation                  0x000000018ed46da4 CFRunLoopRunSpecific + 424
5   CFNetwork                       0x000000018f553df4 +[NSURLConnection(Loader) _resourceLoadLoop:] + 404
6   Foundation                      0x000000018f95f318 __NSThread__start__ + 996
7   libsystem_pthread.dylib         0x000000018df2d68c _pthread_body + 240
8   libsystem_pthread.dylib         0x000000018df2d59c _pthread_body + 0
9   libsystem_pthread.dylib         0x000000018df2acb4 thread_start + 4

Thread 6 name:  GAIThread
Thread 6:
0   libsystem_kernel.dylib          0x000000018de47224 mach_msg_trap + 8
1   libsystem_kernel.dylib          0x000000018de4709c mach_msg + 72
2   CoreFoundation                  0x000000018ee18e90 __CFRunLoopServiceMachPort + 192
3   CoreFoundation                  0x000000018ee16ae4 __CFRunLoopRun + 1060
4   CoreFoundation                  0x000000018ed46da4 CFRunLoopRunSpecific + 424
5   Foundation                      0x000000018f861db4 -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 304
6   Foundation                      0x000000018f8b6704 -[NSRunLoop(NSRunLoop) run] + 88
7   myApp                   0x0000000100120398 0x1000c0000 + 394136
8   Foundation                      0x000000018f95f318 __NSThread__start__ + 996
9   libsystem_pthread.dylib         0x000000018df2d68c _pthread_body + 240
10  libsystem_pthread.dylib         0x000000018df2d59c _pthread_body + 0
11  libsystem_pthread.dylib         0x000000018df2acb4 thread_start + 4

Thread 7:
0   libsystem_pthread.dylib         0x000000018df2aca8 start_wqthread + 0

Thread 8:
0   libsystem_pthread.dylib         0x000000018df2aca8 start_wqthread + 0

但在主要情况下,崩溃报告如下所示:

Incident Identifier: D5D6C3C6-7EB7-4E2C-901C-7203943BD722
CrashReporter Key:   c04f591f9e0cc9d1991ce10e33ebcabd56affbe6
Hardware Model:      iPhone8,4
Process:             myApp [17444]
Path:                /private/var/containers/Bundle/Application/93AB2A15-0C65-47D5-BE24-FB298DC396E0/myApp.app/myApp
Identifier:          com.example.myApp
Version:             2 (1.0.2)
Code Type:           ARM-64 (Native)
Role:                Foreground
Parent Process:      launchd [1]
Coalition:           com.example.myApp [16449]


Date/Time:           2017-09-19 12:41:45.3051 +0300
Launch Time:         2017-09-19 12:24:22.7861 +0300
OS Version:          iPhone OS 10.3.3 (14G60)
Report Version:      104

Exception Type:  EXC_CRASH (SIGKILL)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note:  EXC_CORPSE_NOTIFY
Termination Reason: Namespace <0xF>, Code 0x8badf00d
Triggered by Thread:  0

Filtered syslog:
None found

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libsystem_kernel.dylib          0x000000018de47224 mach_msg_trap + 8
1   libsystem_kernel.dylib          0x000000018de4709c mach_msg + 72
2   CoreFoundation                  0x000000018ee18e90 __CFRunLoopServiceMachPort + 192
3   CoreFoundation                  0x000000018ee16ae4 __CFRunLoopRun + 1060
4   CoreFoundation                  0x000000018ed46da4 CFRunLoopRunSpecific + 424
5   GraphicsServices                0x00000001907b1074 GSEventRunModal + 100
6   UIKit                           0x0000000195001c9c UIApplicationMain + 208
7   myApp                   0x0000000100031bb8 0x10000c000 + 154552
8   libdyld.dylib                   0x000000018dd5559c start + 4

Thread 1 name:  com.apple.uikit.eventfetch-thread
Thread 1:
0   libsystem_kernel.dylib          0x000000018de47224 mach_msg_trap + 8
1   libsystem_kernel.dylib          0x000000018de4709c mach_msg + 72
2   CoreFoundation                  0x000000018ee18e90 __CFRunLoopServiceMachPort + 192
3   CoreFoundation                  0x000000018ee16ae4 __CFRunLoopRun + 1060
4   CoreFoundation                  0x000000018ed46da4 CFRunLoopRunSpecific + 424
5   Foundation                      0x000000018f861db4 -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 304
6   Foundation                      0x000000018f882b84 -[NSRunLoop(NSRunLoop) runUntilDate:] + 96
7   UIKit                           0x000000019598b830 -[UIEventFetcher threadMain] + 136
8   Foundation                      0x000000018f95f318 __NSThread__start__ + 996
9   libsystem_pthread.dylib         0x000000018df2d68c _pthread_body + 240
10  libsystem_pthread.dylib         0x000000018df2d59c _pthread_body + 0
11  libsystem_pthread.dylib         0x000000018df2acb4 thread_start + 4

Thread 2 name:  com.twitter.crashlytics.ios.MachExceptionServer
Thread 2:
0   libsystem_kernel.dylib          0x000000018de47224 mach_msg_trap + 8
1   libsystem_kernel.dylib          0x000000018de4709c mach_msg + 72
2   myApp                   0x000000010008d6a0 0x10000c000 + 530080
3   libsystem_pthread.dylib         0x000000018df2d68c _pthread_body + 240
4   libsystem_pthread.dylib         0x000000018df2d59c _pthread_body + 0
5   libsystem_pthread.dylib         0x000000018df2acb4 thread_start + 4

Thread 3 name:  com.apple.NSURLConnectionLoader
Thread 3:
0   libsystem_kernel.dylib          0x000000018de47224 mach_msg_trap + 8
1   libsystem_kernel.dylib          0x000000018de4709c mach_msg + 72
2   CoreFoundation                  0x000000018ee18e90 __CFRunLoopServiceMachPort + 192
3   CoreFoundation                  0x000000018ee16ae4 __CFRunLoopRun + 1060
4   CoreFoundation                  0x000000018ed46da4 CFRunLoopRunSpecific + 424
5   CFNetwork                       0x000000018f553df4 +[NSURLConnection(Loader) _resourceLoadLoop:] + 404
6   Foundation                      0x000000018f95f318 __NSThread__start__ + 996
7   libsystem_pthread.dylib         0x000000018df2d68c _pthread_body + 240
8   libsystem_pthread.dylib         0x000000018df2d59c _pthread_body + 0
9   libsystem_pthread.dylib         0x000000018df2acb4 thread_start + 4

Thread 4 name:  GAIThread
Thread 4:
0   libsystem_kernel.dylib          0x000000018de47224 mach_msg_trap + 8
1   libsystem_kernel.dylib          0x000000018de4709c mach_msg + 72
2   CoreFoundation                  0x000000018ee18e90 __CFRunLoopServiceMachPort + 192
3   CoreFoundation                  0x000000018ee16ae4 __CFRunLoopRun + 1060
4   CoreFoundation                  0x000000018ed46da4 CFRunLoopRunSpecific + 424
5   Foundation                      0x000000018f861db4 -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 304
6   Foundation                      0x000000018f8b6704 -[NSRunLoop(NSRunLoop) run] + 88
7   myApp                   0x000000010006d9dc 0x10000c000 + 399836
8   Foundation                      0x000000018f95f318 __NSThread__start__ + 996
9   libsystem_pthread.dylib         0x000000018df2d68c _pthread_body + 240
10  libsystem_pthread.dylib         0x000000018df2d59c _pthread_body + 0
11  libsystem_pthread.dylib         0x000000018df2acb4 thread_start + 4

Thread 5:
0   libsystem_pthread.dylib         0x000000018df2aca8 start_wqthread + 0

Thread 6:
0   libsystem_pthread.dylib         0x000000018df2aca8 start_wqthread + 0

Thread 7:
0   libsystem_pthread.dylib         0x000000018df2aca8 start_wqthread + 0

Thread 8:
0   libsystem_pthread.dylib         0x000000018df2aca8 start_wqthread + 0

Thread 9:
0   libsystem_pthread.dylib         0x000000018df2aca8 start_wqthread + 0

也许有人有类似的问题并有一些建议?

最佳答案

有一点很奇怪,你说这发生在后台,但就系统而言,当应用程序在前台时发生崩溃:

Role:                Foreground

所以,这很令人困惑。

只是胡乱猜测,我会研究诸如内存损坏/使用已释放对象(尤其是如果这是非 ARC 代码)、异步代码(如网络请求或计时器回调跳入已释放代码)、执行诸如 UI 之类的事情不是主线程的线程(如果你可以在 Xcode 9 下运行,运行时线程诊断将对此有很大帮助。)即使使用 Xc8,也要查看项目的方案和运行配置下可用的内存调试选项。这些可能会有所帮助。

查看设备上运行的系统日志。您无需使用 Xcode 进行调试即可看到这一点。只需转到“设备”窗口,系统控制台就会在底部附近。您可能需要透露它。该系统日志可能会提供线索。

如果您使用手动保留/释放,请仔细检查在崩溃时间范围内被命中的所有代码。请记住,这些类型的崩溃是在问题发生之后发生的,因此您看到崩溃的位置可能与实际问题的位置关系不大,并且崩溃位置可能会波动,尤其是在不同的设备上。

也许比较 Xcode 8 之前的代码和当前代码以仔细检查您所做的任何更改。我的猜测是您在更新 Xcode 8 的代码时引入了内存问题。

更新:

抱歉,刚刚注意到终止原因。

这可能有帮助:

The exception code 0x8badf00d indicates that an application has been terminated by iOS because a watchdog timeout occurred. The application took too long to launch, terminate, or respond to system events. One common cause of this is doing synchronous networking on the main thread. Whatever operation is on Thread 0: needs to be moved to a background thread, or processed differently, so that it does not block the main thread.

确保在您进入后台时您没有做任何需要很长时间的事情,如果需要使用后台任务,并且不要做任何事情,比如从后台调用 OpenGL。由于崩溃报告说你在前台,我想知道你是否花太长时间进入后台并且 Springboard 正在杀死你的应用程序。系统日志将确认这一点。

关于iOS 应用程序在后台发生奇怪的崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46301314/

相关文章:

ios - 具有已定义属性值的核心数据对象的数量

ios - 是否可以将 SSL 协议(protocol)与 NEVPNManager 一起使用(并且不使用 NETunnelProvider API)

ios - transducer 和 swift 将 javascript 代码移植到 swift 代码

ios - 为 BOOL 指针赋值时出现奇怪的警告问题

ios - 是否可以在 NSUserDefaults 中保存 NSManagedObject?

ios - 类没有实现 doesNotRecognizeSelector

ios - 谁能告诉我如何在 Objective-c 中将 UTF-8 值转换为 UCS-2 值?

ios - 具有透明背景的 Swift 模态视图 Controller

objective-c - 使用 viewDid/WillMoveToSuperview 设置 NSView

objective-c - 如何在 iPhone 上使用带有线程的 sqlite + fdbm 库