如何调试EXC_CRASH(SIGTRAP)

我正在运行我的应用程序正常运行,直到我从后台恢复或没有位置服务,该应用程序将崩溃。

崩溃日志显示exception类型:EXC_CRASH(SIGTRAP)

有谁知道如何调试它?

Exception Type: EXC_CRASH (SIGTRAP) Exception Codes: 0x00000000, 0x00000000 Crashed Thread: 0 Thread 0 name: Dispatch queue: com.apple.main-thread Thread 0 Crashed: 0 libsystem_kernel.dylib 0x36398848 __kill + 8 1 FrogFinder 0x000b5034 0x69000 + 311348 2 CoreFoundation 0x3447e980 __handleUncaughtException + 68 3 libobjc.A.dylib 0x346ce2ca _objc_terminate + 122 4 libc++abi.dylib 0x338a33be _ZL19safe_handler_callerPFvvE + 70 5 libc++abi.dylib 0x338a344a std::terminate() + 14 6 libc++abi.dylib 0x338a481e __cxa_rethrow + 82 7 libobjc.A.dylib 0x346ce22e objc_exception_rethrow + 6 8 CoreFoundation 0x343d453e CFRunLoopRunSpecific + 398 9 CoreFoundation 0x343d439e CFRunLoopRunInMode + 98 10 GraphicsServices 0x30c58fc6 GSEventRunModal + 150 11 UIKit 0x3785573c UIApplicationMain + 1084 12 FrogFinder 0x0006a7e6 0x69000 + 6118 13 FrogFinder 0x0006a7a4 0x69000 + 6052 Thread 1 name: Dispatch queue: com.apple.libdispatch-manager Thread 1: 0 libsystem_kernel.dylib 0x363893b4 kevent + 24 1 libdispatch.dylib 0x370b3e78 _dispatch_mgr_invoke + 708 2 libdispatch.dylib 0x370b3b96 _dispatch_mgr_thread + 30 Thread 2 name: WebThread Thread 2: 0 libsystem_kernel.dylib 0x36389010 mach_msg_trap + 20 1 libsystem_kernel.dylib 0x36389206 mach_msg + 50 2 CoreFoundation 0x3445241c __CFRunLoopServiceMachPort + 120 3 CoreFoundation 0x34451154 __CFRunLoopRun + 876 4 CoreFoundation 0x343d44d6 CFRunLoopRunSpecific + 294 5 CoreFoundation 0x343d439e CFRunLoopRunInMode + 98 6 WebCore 0x368a8128 _ZL12RunWebThreadPv + 396 7 libsystem_c.dylib 0x33224c16 _pthread_start + 314 8 libsystem_c.dylib 0x33224ad0 thread_start + 0 Thread 3 name: com.apple.NSURLConnectionLoader Thread 3: 0 libsystem_kernel.dylib 0x36389010 mach_msg_trap + 20 1 libsystem_kernel.dylib 0x36389206 mach_msg + 50 2 CoreFoundation 0x3445241c __CFRunLoopServiceMachPort + 120 3 CoreFoundation 0x34451154 __CFRunLoopRun + 876 4 CoreFoundation 0x343d44d6 CFRunLoopRunSpecific + 294 5 CoreFoundation 0x343d439e CFRunLoopRunInMode + 98 6 Foundation 0x35dd4bc2 +[NSURLConnection(Loader) _resourceLoadLoop:] + 302 7 Foundation 0x35dd4a8a -[NSThread main] + 66 8 Foundation 0x35e6859a __NSThread__main__ + 1042 9 libsystem_c.dylib 0x33224c16 _pthread_start + 314 10 libsystem_c.dylib 0x33224ad0 thread_start + 0 Thread 4: 0 libsystem_kernel.dylib 0x36389010 mach_msg_trap + 20 1 libsystem_kernel.dylib 0x36389206 mach_msg + 50 2 CoreFoundation 0x3445241c __CFRunLoopServiceMachPort + 120 3 CoreFoundation 0x34451154 __CFRunLoopRun + 876 4 CoreFoundation 0x343d44d6 CFRunLoopRunSpecific + 294 5 CoreFoundation 0x343d439e CFRunLoopRunInMode + 98 6 Foundation 0x35dc8b7e -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 250 7 Foundation 0x35de252c -[NSRunLoop(NSRunLoop) run] + 72 8 FrogFinder 0x000c8da6 0x69000 + 392614 9 Foundation 0x35dd4a8a -[NSThread main] + 66 10 Foundation 0x35e6859a __NSThread__main__ + 1042 11 libsystem_c.dylib 0x33224c16 _pthread_start + 314 12 libsystem_c.dylib 0x33224ad0 thread_start + 0 Thread 5 name: NetworkIO Thread 5: 0 libsystem_kernel.dylib 0x36389010 mach_msg_trap + 20 1 libsystem_kernel.dylib 0x36389206 mach_msg + 50 2 CoreFoundation 0x3445241c __CFRunLoopServiceMachPort + 120 3 CoreFoundation 0x34451154 __CFRunLoopRun + 876 4 CoreFoundation 0x343d44d6 CFRunLoopRunSpecific + 294 5 CoreFoundation 0x343d439e CFRunLoopRunInMode + 98 6 MapKit 0x38030412 0x38022000 + 58386 7 Foundation 0x35dd4a8a -[NSThread main] + 66 8 Foundation 0x35e6859a __NSThread__main__ + 1042 9 libsystem_c.dylib 0x33224c16 _pthread_start + 314 10 libsystem_c.dylib 0x33224ad0 thread_start + 0 

您还可以启用exception断点。 在XCode 4中,单击您的项目并选择断点选项卡。 在该选项卡的底部是| + | – | 搜索栏。 选择+项和“添加Exeception Breakpoint”。 您可以将其保留为全部或选择Objective-C。 这样你就可以打破调试器,并能够看到导致这种exception的原因。

对于Xcode 4.2和iOS 5,未被捕获的exception似乎不再显示在控制台中。 我建议添加以下内容或修改现有的未捕获exception处理程序,以便为您转储exceptioncallstack。

 #ifdef DEBUG void eHandler(NSException *); void eHandler(NSException *exception) { NSLog(@"%@", exception); NSLog(@"%@", [exception callStackSymbols]); } #endif int main(int argc, char *argv[]) { #ifdef DEBUG NSSetUncaughtExceptionHandler(&eHandler); #endif ...rest of your main function here... }