2010-08-30 22 views
0

我有一个应用程序通过附件端口与设备进行通信。当设备正在向iPhone分发数据时(每20毫秒一个13字节的数据包,所以速度不是很快),如果我按主页按钮将应用程序发送到背景,则再次打开它会崩溃。我添加了收听者UIApplicationDidBecomeActiveNotificationUIApplicationWillResignActiveNotification,当应用程序转到后台时关闭数据传输,并在返回时将其重新打开,现在它不会一直崩溃,而是不规律地崩溃。当它崩溃时,甚至在发送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 
+0

我开始认为memcpy(线程4)可能会导致一些问题。我在我的processRxBuffer方法中使用memcpy从接收缓冲区中删除已处理的字节。每当我收到这个错误时,这个memcpy总是出现在其中一个线程中。点击主页按钮并发送到后台会“中断”memcpy和损坏的内存吗? – Ned 2010-08-30 20:53:38

+0

它不能是memcpy,线程3崩溃,而不是4.它看起来像什么东西正在被释放后,它已被autoreleased,并导致一个错误,当autorelease池被清空。 – ughoavgfhw 2011-01-04 02:12:33

+0

内德,你有没有找到解决这个问题的办法?我刚刚遇到了与我的应用程序相同的问题。当我调用'[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]' – 2011-02-18 15:57:06

回答

0

将您的应用程序崩溃当设备断开连接或空闲时,或当设备发送数据并只出现崩溃?

+0

时,除非我在CFCalendarCreateWithIdentifier内部发生崩溃,否则仅当设备正在发送数据流时。这让我相信,在退出时关闭它并在重新启动时将其关闭将解决问题,并且它确实有帮助,但它仍然每3-4次崩溃一次。我还在我的两个课堂中使用NSOperationQueues来帮助处理传入的数据,我怀疑这是导致崩溃的原因。 – Ned 2010-08-30 18:26:14

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) 

是在应用程序崩溃,这个问题可能是从方法processRXBuffer在SerialPort类。
仔细检查你的代码,你会发现问题在哪里。