我有一个应用程序通过附件端口与设备进行通信。当设备正在向iPhone分发数据时(每20毫秒一个13字节的数据包,所以速度不是很快),如果我按主页按钮将应用程序发送到背景,则再次打开它会崩溃。我添加了收听者UIApplicationDidBecomeActiveNotification
和UIApplicationWillResignActiveNotification
,当应用程序转到后台时关闭数据传输,并在返回时将其重新打开,现在它不会一直崩溃,而是不规律地崩溃。当它崩溃时,甚至在发送UIApplicationDidBecomeActiveNotification
之前崩溃。iPhone应用程序在前台崩溃时
下面是从错误的设备日志:
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
我开始认为memcpy(线程4)可能会导致一些问题。我在我的processRxBuffer方法中使用memcpy从接收缓冲区中删除已处理的字节。每当我收到这个错误时,这个memcpy总是出现在其中一个线程中。点击主页按钮并发送到后台会“中断”memcpy和损坏的内存吗? – Ned 2010-08-30 20:53:38
它不能是memcpy,线程3崩溃,而不是4.它看起来像什么东西正在被释放后,它已被autoreleased,并导致一个错误,当autorelease池被清空。 – ughoavgfhw 2011-01-04 02:12:33
内德,你有没有找到解决这个问题的办法?我刚刚遇到了与我的应用程序相同的问题。当我调用'[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]' – 2011-02-18 15:57:06