程序开发时遇到 EXC_BAD_ACCESS 错误导致 Crash,出现这种错误时一般 Xcode 不会给我们太多的信息来定位错误来源,只是在应用 Delegate 上留下像Thread 1: Program received signal:”EXC_BAD_ACCESS”,让问题无从找起。
尝试解决方法:
Xcode 使用 cmd + shift + <打开 如下界面并且勾选红框中选项
然后运行程序执行操作到Crash位置,此时在控制台中会出现
//ooooo为进程pid,xxxxxx为对象地址
2016-06-13 17:15:43.035 test[ooooo:4702304] -[XXXXXX XXXXXX] message sent to deallocated instance xxxxxx
此时打开终端,输入
malloc_history ooooo xxxxxx |grep xxxxxx
Invalid connection: com.apple.coresymbolicationd
ALLOC 0x7f9b236f42d0-0x7f9b236f468f [size=960]: thread_1139a9000 |start | main | UIApplicationMain | GSEventRunModal | CFRunLoopRunSpecific | __CFRunLoopRun | __CFRunLoopDoSources0 | __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ | _UIApplicationHandleEventQueue | _UIApplicationHandleEventFromQueueEvent | -[UIApplication sendEvent:] | -[UIWindow sendEvent:] | -[UIWindow _sendTouchesForEvent:] | -[UIButton(PPiAwesome) touchesEnded:withEvent:] | -[UIControl touchesEnded:withEvent:] | -[UIControl _sendActionsForEvents:withEvent:] | -[UIApplication sendAction:to:from:forEvent:] | -[XXXXXXXXXXXX XXXXXXX:] | _objc_rootAlloc | class_createInstance | calloc | malloc_zone_calloc
会出现上述信息,这些信息为该对象的全部调用,-[XXXXXXXXXXXX XXXXXXX:]为该对象最后调用的位置,在该方法中可以打印各对象的地址,与最后message sent to deallocated instance xxxxxx 中 xxxxx 的地址进行对比,找出问题所在。
问题解决后,取消上图勾选的选项