Xcode运行报错‘libc++abi.dylib: terminating with uncaught exception of type NSException (lldb)’求助
解决Xcode中
libc++abi.dylib: terminating with uncaught exception of type NSException错误 Hey,这个错误我在日常iOS/macOS开发中碰到过好多次,本质是程序抛出了未被捕获的Objective-C/Swift异常,直接导致进程终止。别慌,咱们一步步来排查定位问题:
第一步:先拿到具体的崩溃详情
默认的错误提示太笼统,你得先开启「异常断点」来捕获精准的崩溃位置和原因:
- 打开Xcode的断点导航栏(快捷键
Cmd + 8就行) - 点左下角的
+号,选择「Exception Breakpoint」 - 弹出的设置窗口里,保持默认就行(要是你确定是Swift或OC的问题,也可以针对性选择对应的Exception类型),点「Done」
- 重新跑程序,这次断点会直接停在抛出异常的那行代码,而且控制台会输出详细的异常原因(比如“给某个对象发了它不认识的消息”“数组越界”“控件关联失效”之类的)
常见触发场景及解决办法
根据我处理过的大量案例,最容易触发这个错误的几个场景如下:
- 方法调用出错:比如给某个对象发了它没有实现的方法(比如方法名拼写错了,或者对象是
nil却调用了非可选方法)- 解决:检查崩溃行的对象有没有成功初始化,方法名和代码里的定义是不是完全一致
- UI控件关联失效:Storyboard/XIB里的IBOutlet/IBAction没正确绑到代码,或者绑定的对象已经被提前释放了
- 解决:打开Storyboard,选中控件看右侧的连接面板,删掉无效的关联,重新正确绑定
- 数组/集合操作越界:比如访问了数组不存在的索引,或者往不可变集合里加元素
- 解决:检查集合操作的代码,确保索引在合法范围内,修改集合时确认用的是可变类型(比如
NSMutableArray而不是NSArray)
- 解决:检查集合操作的代码,确保索引在合法范围内,修改集合时确认用的是可变类型(比如
- 资源文件找不到:比如加载图片、本地文件时,文件名拼写错了,或者文件没加到项目的Target里
- 解决:核对代码里的文件名和实际资源文件名,再去Xcode的「Build Phases」->「Copy Bundle Resources」里确认文件已经添加进去
- 权限没配置:比如访问相机、相册但没在
Info.plist里加对应的权限描述- 解决:打开
Info.plist,添加对应的权限键(比如NSCameraUsageDescription),并填写合理的描述文本
- 解决:打开
额外排查小技巧
要是开了异常断点还是找不到问题,可以试试:
- 仔细看Xcode控制台的完整输出,崩溃前一般会有类似
*** Terminating app due to uncaught exception 'XXX', reason: 'XXX'的详细信息,这才是定位问题的核心 - 检查
AppDelegate或SceneDelegate里的启动代码,很多初始化错误都会在启动阶段触发这个崩溃
内容的提问来源于stack exchange,提问作者Shree
相关产品推荐
相关产品推荐

