iPhone 应用程序在进入前台时崩溃
我有一个通过附件端口与设备通信的应用程序。当设备向 iPhone 发送数据(以每 20 毫秒一个 13 字节数据包的速率,所以速度不是很快)时,如果我按主页按钮将应用程序发送到后台,然后再次打开它,它将崩溃。我在 UIApplicationDidBecomeActiveNotification
和 UIApplicationWillResignActiveNotification
中添加了监听器,以在应用程序进入后台时关闭数据传输,并在应用程序返回时重新打开它,现在它不会一直崩溃,而是不规律地崩溃。当它崩溃时,它甚至在发送 UIApplicationDidBecomeActiveNotification
之前就崩溃了。
这是错误的设备日志:
Exception Type: EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0x00000004
Crashed Thread: 3
Thread 0:
0 libSystem.B.dylib 0x000016a8 semaphore_wait_trap + 8
1 libSystem.B.dylib 0x0002ed9e semaphore_wait + 2
2 libSystem.B.dylib 0x000d7ce4 _dispatch_semaphore_wait_slow + 296
3 libSystem.B.dylib 0x000d64a0 _dispatch_barrier_sync_f_slow + 128
4 CoreFoundation 0x0001511e CFMachPortCreateRunLoopSource + 118
5 QuartzCore 0x00005466 CA::Context::client_port() + 78
6 QuartzCore 0x00005310 CA::Context::connect_remote() + 244
7 QuartzCore 0x00004fda -[CAContextImpl initRemoteWithOptions:] + 26
8 QuartzCore 0x00004f9c +[CAContext remoteContextWithOptions:] + 28
9 UIKit 0x0000dae0 -[UIWindow _createContext] + 532
10 UIKit 0x0015957e _UIWindowUpdateVisibleContextOrder + 98
11 UIKit 0x0015962a +[UIWindow _prepareWindowsForAppResume] + 10
12 UIKit 0x00152824 -[UIApplication _handleApplicationResumeEvent:] + 68
13 UIKit 0x0005da80 -[UIApplication handleEvent:withNewEvent:] + 3772
14 UIKit 0x0005ca56 -[UIApplication sendEvent:] + 38
15 UIKit 0x0005c500 _UIApplicationHandleEvent + 5016
16 GraphicsServices 0x00004140 PurpleEventCallback + 660
17 GraphicsServices 0x000041ca PurpleEventSignalCallback + 10
18 CoreFoundation 0x00071a86 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION_ + 6
19 CoreFoundation 0x000736ac _CFRunLoopDoSources0 + 188
20 CoreFoundation 0x00074504 _CFRunLoopRun + 224
21 CoreFoundation 0x0001d8e4 CFRunLoopRunSpecific + 224
22 CoreFoundation 0x0001d7ec CFRunLoopRunInMode + 52
23 GraphicsServices 0x000036e8 GSEventRunModal + 108
24 GraphicsServices 0x00003794 GSEventRun + 56
25 UIKit 0x000062a0 -[UIApplication _run] + 396
26 UIKit 0x00004e10 UIApplicationMain + 664
27 TestRaspLayer 0x00003034 main (main.m:14)
28 TestRaspLayer 0x00002fe8 start + 32
Thread 1:
0 libSystem.B.dylib 0x0002dc4c kevent + 24
1 libSystem.B.dylib 0x000d6e44 _dispatch_mgr_invoke + 88
2 libSystem.B.dylib 0x000d6894 _dispatch_queue_invoke + 96
3 libSystem.B.dylib 0x000d6a34 _dispatch_worker_thread2 + 120
4 libSystem.B.dylib 0x0007ad82 _pthread_wqthread + 258
5 libSystem.B.dylib 0x00073fcc start_wqthread + 0
Thread 2:
0 libSystem.B.dylib 0x00001658 mach_msg_trap + 20
1 libSystem.B.dylib 0x00003724 mach_msg + 44
2 CoreFoundation 0x000722c8 _CFRunLoopServiceMachPort + 88
3 CoreFoundation 0x00074582 _CFRunLoopRun + 350
4 CoreFoundation 0x0001d8e4 CFRunLoopRunSpecific + 224
5 CoreFoundation 0x0001d7ec CFRunLoopRunInMode + 52
6 WebCore 0x00003056 RunWebThread(void*) + 362
7 libSystem.B.dylib 0x0007a986 _pthread_start + 242
8 libSystem.B.dylib 0x000700e4 thread_start + 0
Thread 3 Crashed:
0 libicucore.A.dylib 0x00001bd0 uhash_get + 24
1 libicucore.A.dylib 0x00055b10 ures_hasNext + 720
2 libicucore.A.dylib 0x00055d08 ures_hasNext + 1224
3 libicucore.A.dylib 0x00055e64 ures_hasNext + 1572
4 libicucore.A.dylib 0x00003a28 ures_openDirect + 80
5 libicucore.A.dylib 0x000b4dee icu::TimeZone::getGMT() + 442
6 libicucore.A.dylib 0x0000861a icu::TimeZone::createSystemTimeZone(icu::UnicodeString const&) + 22
7 libicucore.A.dylib 0x0000cf90 icu::TimeZone::createTimeZone(icu::UnicodeString const&) + 4
8 libicucore.A.dylib 0x000bc6f8 ucal_setAttribute + 96
9 libicucore.A.dylib 0x0000d650 ucal_open + 32
10 CoreFoundation 0x000a7968 _CFCalendarCreateUCalendar + 160
11 CoreFoundation 0x00029cde CFCalendarCreateWithIdentifier + 362
12 CoreFoundation 0x0008d128 _CFLogCString + 472
13 CoreFoundation 0x00029b52 _CFLogvEx + 166
14 CoreFoundation 0x0003d63e CFLog + 26
15 CoreFoundation 0x00015184 _CFAutoreleasePoolPop + 52
16 Foundation 0x0000422a NSPopAutoreleasePool + 2
17 Foundation 0x0000de16 -[_NSOperationInternal start] + 910
18 Foundation 0x0000da78 -[NSOperation start] + 16
19 Foundation 0x0007e5b4 _startOperations_block_invoke_2 + 40
20 libSystem.B.dylib 0x000d5c54 _dispatch_call_block_and_release + 12
21 libSystem.B.dylib 0x000d6a34 _dispatch_worker_thread2 + 120
22 libSystem.B.dylib 0x0007ad82 _pthread_wqthread + 258
23 libSystem.B.dylib 0x00073fcc start_wqthread + 0
Thread 4:
0 libSystem.B.dylib 0x00001f8e memcpy + 718
1 TestRaspLayer 0x00007718 _inline_memcpy_chk (_string.h:58)
2 TestRaspLayer 0x00007678 -[SERIALPort processRxBuffer] (SERIALPort.m:243)
3 CoreFoundation 0x0009f06c _invoking_ + 60
4 CoreFoundation 0x00032706 -[NSInvocation invoke] + 102
5 Foundation 0x0007eb50 -[NSInvocationOperation main] + 72
6 Foundation 0x0000dd14 -[_NSOperationInternal start] + 652
7 Foundation 0x0000da78 -[NSOperation start] + 16
8 Foundation 0x0007e5b4 _startOperations_block_invoke_2 + 40
9 libSystem.B.dylib 0x000d5c54 _dispatch_call_block_and_release + 12
10 libSystem.B.dylib 0x000d6a34 _dispatch_worker_thread2 + 120
11 libSystem.B.dylib 0x0007ad82 _pthread_wqthread + 258
12 libSystem.B.dylib 0x00073fcc start_wqthread + 0
Thread 3 crashed with ARM Thread State:
r0: 0x00000000 r1: 0x0000007f r2: 0x00000077 r3: 0x80000001
r4: 0x0013fc50 r5: 0x0038003c r6: 0x0038012c r7: 0x0037ff70
r8: 0x00000000 r9: 0xffffffff r10: 0x0013fcb4 r11: 0x00000000
ip: 0x00000077 sp: 0x0037ff68 lr: 0x339fbe09 pc: 0x339b8bd0
cpsr: 0x50000030
I have an application that is communicating to a device through the accessory port. When the device is spitting data (at a rate of one 13-byte packet every 20 ms, so not very quickly) to the iPhone, if I press the home button to send the app to the background, then open it again it will crash. I have added listeners to the UIApplicationDidBecomeActiveNotification
and UIApplicationWillResignActiveNotification
to shut down the data transmission when the app goes to the background, and turn it back on when it comes back, and now it doesn't crash all the time, but irregularly. When it crashes, it crashes even before it sends the UIApplicationDidBecomeActiveNotification
.
Here's the Device Log from the error:
Exception Type: EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0x00000004
Crashed Thread: 3
Thread 0:
0 libSystem.B.dylib 0x000016a8 semaphore_wait_trap + 8
1 libSystem.B.dylib 0x0002ed9e semaphore_wait + 2
2 libSystem.B.dylib 0x000d7ce4 _dispatch_semaphore_wait_slow + 296
3 libSystem.B.dylib 0x000d64a0 _dispatch_barrier_sync_f_slow + 128
4 CoreFoundation 0x0001511e CFMachPortCreateRunLoopSource + 118
5 QuartzCore 0x00005466 CA::Context::client_port() + 78
6 QuartzCore 0x00005310 CA::Context::connect_remote() + 244
7 QuartzCore 0x00004fda -[CAContextImpl initRemoteWithOptions:] + 26
8 QuartzCore 0x00004f9c +[CAContext remoteContextWithOptions:] + 28
9 UIKit 0x0000dae0 -[UIWindow _createContext] + 532
10 UIKit 0x0015957e _UIWindowUpdateVisibleContextOrder + 98
11 UIKit 0x0015962a +[UIWindow _prepareWindowsForAppResume] + 10
12 UIKit 0x00152824 -[UIApplication _handleApplicationResumeEvent:] + 68
13 UIKit 0x0005da80 -[UIApplication handleEvent:withNewEvent:] + 3772
14 UIKit 0x0005ca56 -[UIApplication sendEvent:] + 38
15 UIKit 0x0005c500 _UIApplicationHandleEvent + 5016
16 GraphicsServices 0x00004140 PurpleEventCallback + 660
17 GraphicsServices 0x000041ca PurpleEventSignalCallback + 10
18 CoreFoundation 0x00071a86 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION_ + 6
19 CoreFoundation 0x000736ac _CFRunLoopDoSources0 + 188
20 CoreFoundation 0x00074504 _CFRunLoopRun + 224
21 CoreFoundation 0x0001d8e4 CFRunLoopRunSpecific + 224
22 CoreFoundation 0x0001d7ec CFRunLoopRunInMode + 52
23 GraphicsServices 0x000036e8 GSEventRunModal + 108
24 GraphicsServices 0x00003794 GSEventRun + 56
25 UIKit 0x000062a0 -[UIApplication _run] + 396
26 UIKit 0x00004e10 UIApplicationMain + 664
27 TestRaspLayer 0x00003034 main (main.m:14)
28 TestRaspLayer 0x00002fe8 start + 32
Thread 1:
0 libSystem.B.dylib 0x0002dc4c kevent + 24
1 libSystem.B.dylib 0x000d6e44 _dispatch_mgr_invoke + 88
2 libSystem.B.dylib 0x000d6894 _dispatch_queue_invoke + 96
3 libSystem.B.dylib 0x000d6a34 _dispatch_worker_thread2 + 120
4 libSystem.B.dylib 0x0007ad82 _pthread_wqthread + 258
5 libSystem.B.dylib 0x00073fcc start_wqthread + 0
Thread 2:
0 libSystem.B.dylib 0x00001658 mach_msg_trap + 20
1 libSystem.B.dylib 0x00003724 mach_msg + 44
2 CoreFoundation 0x000722c8 _CFRunLoopServiceMachPort + 88
3 CoreFoundation 0x00074582 _CFRunLoopRun + 350
4 CoreFoundation 0x0001d8e4 CFRunLoopRunSpecific + 224
5 CoreFoundation 0x0001d7ec CFRunLoopRunInMode + 52
6 WebCore 0x00003056 RunWebThread(void*) + 362
7 libSystem.B.dylib 0x0007a986 _pthread_start + 242
8 libSystem.B.dylib 0x000700e4 thread_start + 0
Thread 3 Crashed:
0 libicucore.A.dylib 0x00001bd0 uhash_get + 24
1 libicucore.A.dylib 0x00055b10 ures_hasNext + 720
2 libicucore.A.dylib 0x00055d08 ures_hasNext + 1224
3 libicucore.A.dylib 0x00055e64 ures_hasNext + 1572
4 libicucore.A.dylib 0x00003a28 ures_openDirect + 80
5 libicucore.A.dylib 0x000b4dee icu::TimeZone::getGMT() + 442
6 libicucore.A.dylib 0x0000861a icu::TimeZone::createSystemTimeZone(icu::UnicodeString const&) + 22
7 libicucore.A.dylib 0x0000cf90 icu::TimeZone::createTimeZone(icu::UnicodeString const&) + 4
8 libicucore.A.dylib 0x000bc6f8 ucal_setAttribute + 96
9 libicucore.A.dylib 0x0000d650 ucal_open + 32
10 CoreFoundation 0x000a7968 _CFCalendarCreateUCalendar + 160
11 CoreFoundation 0x00029cde CFCalendarCreateWithIdentifier + 362
12 CoreFoundation 0x0008d128 _CFLogCString + 472
13 CoreFoundation 0x00029b52 _CFLogvEx + 166
14 CoreFoundation 0x0003d63e CFLog + 26
15 CoreFoundation 0x00015184 _CFAutoreleasePoolPop + 52
16 Foundation 0x0000422a NSPopAutoreleasePool + 2
17 Foundation 0x0000de16 -[_NSOperationInternal start] + 910
18 Foundation 0x0000da78 -[NSOperation start] + 16
19 Foundation 0x0007e5b4 _startOperations_block_invoke_2 + 40
20 libSystem.B.dylib 0x000d5c54 _dispatch_call_block_and_release + 12
21 libSystem.B.dylib 0x000d6a34 _dispatch_worker_thread2 + 120
22 libSystem.B.dylib 0x0007ad82 _pthread_wqthread + 258
23 libSystem.B.dylib 0x00073fcc start_wqthread + 0
Thread 4:
0 libSystem.B.dylib 0x00001f8e memcpy + 718
1 TestRaspLayer 0x00007718 _inline_memcpy_chk (_string.h:58)
2 TestRaspLayer 0x00007678 -[SERIALPort processRxBuffer] (SERIALPort.m:243)
3 CoreFoundation 0x0009f06c _invoking_ + 60
4 CoreFoundation 0x00032706 -[NSInvocation invoke] + 102
5 Foundation 0x0007eb50 -[NSInvocationOperation main] + 72
6 Foundation 0x0000dd14 -[_NSOperationInternal start] + 652
7 Foundation 0x0000da78 -[NSOperation start] + 16
8 Foundation 0x0007e5b4 _startOperations_block_invoke_2 + 40
9 libSystem.B.dylib 0x000d5c54 _dispatch_call_block_and_release + 12
10 libSystem.B.dylib 0x000d6a34 _dispatch_worker_thread2 + 120
11 libSystem.B.dylib 0x0007ad82 _pthread_wqthread + 258
12 libSystem.B.dylib 0x00073fcc start_wqthread + 0
Thread 3 crashed with ARM Thread State:
r0: 0x00000000 r1: 0x0000007f r2: 0x00000077 r3: 0x80000001
r4: 0x0013fc50 r5: 0x0038003c r6: 0x0038012c r7: 0x0037ff70
r8: 0x00000000 r9: 0xffffffff r10: 0x0013fcb4 r11: 0x00000000
ip: 0x00000077 sp: 0x0037ff68 lr: 0x339fbe09 pc: 0x339b8bd0
cpsr: 0x50000030
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
当设备断开连接或空闲时,您的应用程序会崩溃吗?还是仅在设备发送数据时才会发生崩溃?
Will your app crash when the device is disconnected or idle, or does the crash only occur when the device is sending data?
我认为
应用程序崩溃的地方,问题可能来自 SERIALPort 类中的 processRXBuffer 方法。
仔细检查你的代码,你就会发现问题出在哪里。
I think
is where the app crashes, the problem could be from method processRXBuffer in SERIALPort class.
Double check you code and you'll find where the problem is.