iOS - EXC_BAD_ACCESS 错误排查

当iOS应用遇到EXC_BAD_ACCESS错误并Crash时,Xcode提供的信息有限。通过启用 zombies 插件,可以在控制台获取对象调用栈信息,从而定位到导致问题的最后调用方法,通过对比地址找到已释放实例的使用,进而解决内存管理问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

程序开发时遇到 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 的地址进行对比,找出问题所在。

问题解决后,取消上图勾选的选项

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值