文档章节

libc++abi.dylib: terminate_handler unexpectedly错误

yoyoso
 yoyoso
发布于 2015/03/09 14:47
字数 1177
阅读 20039
收藏 0

今天测试app时发现一个必现的异常,当在登录成功后再打开登录前点击的页面时,就会在Xcode console中打印如下日志:

NSScanner:nil string argument
NSScanner:nil string argument
libc++abi.dylib: terminate_handler unexpectedly threw an exception

然后app就会crash掉。

搜索了一下相关资料,得知出现NSScanner: nil string argument问题都是跟字符串有关,一般认为是intWithString:的参数传入了nil就会出现这个问题。但是项目的代码中并没有几处intWithString:的地方,逐一加断点都排除了出问题的可能。

然后我单步调试,发现问题可能出在这几行代码:
NSDictionary *para=nil;
para=@{@"userid":[Configs getInstance].me.uid, @"flag":@"1" };
 

那么最有问题的可能在这里:[Configs getInstance].me.uid,会不会在它为nil时出现上面的crash问题呢?经过验证,在出现crash之前这个uid值果然为nil,又是前人留下的坑……对代码进行了一些调整,此问题解决。

 

20150411更新:

出现NSScanner:nil string argument这个问题很有可能是因为你在项目中用了友盟的SDK,这样的错误信息非常不利于定位,可以先把调用友盟SDK的代码注释掉来定位问题。

 

20151119更新:

这篇文章libc++abi.dylib: terminate_handler unexpectedly threw an exception错误小结 对这个问题进行了一些分析:

现在唯一的信息点是libc++abi.dylib,这个库到底是做什么的?从后缀看,是一个动态库,那么会不会是因为发生了一些动态错误?而按经验来看,一般的动态错误基本是因为动态类型错误引起,在object-c语言中,会发生动态类型错误的可能基本存在于不可变类型与可变类型之间的转换,那么我们的查错范围将优先限制在不可变类型与可变类型转换上,是否我们对一个不可变类型进行了修改操作?当然,编译器没有那么傻,如果直接对一个不可变类型进行修改操作,是会直接报错的,那么就剩下另一种可能,程序将一个不可变类型赋值给可变类型,然后对可变类型进行了修改操作,这样可以通过静态检查,但是动态运行的时候,就会发生类型错误。基于以上分析,我们可以跟踪断点,会发现程序在对mutable对象进行add、set等操作时挂掉,而这个对象实际上赋值的是一个不可变对象。常见的情况是把一个NSArray对象赋值给一个NSMutableArray对象,然后进行了delete、add等修改操作,或者把一个NSDictionary对象赋值给一个NSMutableDictionary对象,然后进行了set等操作。

 

然而我今天又遇到这样的问题,单步调试发现crash发生在dequeueReusableCellWithIdentifier:方法这里。定位到最后才发现在代码里把一个IBOutlet改名了,但是xib里这个改名前的IBOutlet还存在,去掉改名前的IBOutlet就解决问题了。

 

20151203更新:

遇到这种错误:

-[__NSArrayI length]: unrecognized selector sent to instance 0x1686d110

[;libc++abi.dylib: terminate_handler unexpectedly threw an exception

 

正常情况下用Xcode Debug是看不到这发生crash的位置的,只知道是某个字符串变成了NSArray呢?怎么快速定位呢,拔掉数据线,再重现一次Crash,然后再连接数据线,选择Xcode菜单上的Window——Devices,在左侧列表找到设备名,点击其右的View Device Logs,定位到刚刚发生的crash log,点右键选择Re-Symbolicate Log,稍等片刻你就可以解析后的Crash log了,这个时候就很容易看到crash发生的代码行了。

 

今天用PushViewController时又遇到这种错误,原因是新建了一个VC,没用Xib,后来又想用Xib于是又单独新建了一个Xib,但是没有把File's Owner中的View属性与View关联,就报了libc++abi.dylib: terminate_handler unexpectedly threw an exception这种错了。

领个红包,支持一下作者

这是支付宝推出的一个最新活动,用支付宝扫码即有红包送,0元到99元不等,红包可以到店支付使用,每日仅可领一次。你每用一个红包,作者即可得到支付宝送出的1毛赏金,如果你觉得这篇文章对你有用,那不如扫码支持一下作者吧!

参考:

UITableView删除的时候崩溃NSScanner:nil string argument

xcode 5的调试输出区域 不断输出NSScanner: nil string argument 

NSScanner: nil string argument报错调试方案

© 著作权归作者所有

共有 人打赏支持
yoyoso
粉丝 49
博文 129
码字总数 45109
作品 0
南京
高级程序员
私信 提问
加载中

评论(4)

yoyoso
yoyoso

引用来自“zhangmeng1847”的评论

楼主你好,我也遇到了NSScanner: nil string argument,libc++abi.dylib: terminate_handler unexpectedly threw an exception这样的crash,但是这个crash是在我的工程运行了一会然后静止在那,突然就crash,弹出上面的崩溃信息,这真的是不好定位,在哪个界面也不知道,全局断电也没用,不知道楼主有没有好的解决方法呢?
麻烦你看我文章最后一段,就是20150411更新那里
z
zhangmeng1847
楼主你好,我也遇到了NSScanner: nil string argument,libc++abi.dylib: terminate_handler unexpectedly threw an exception这样的crash,但是这个crash是在我的工程运行了一会然后静止在那,突然就crash,弹出上面的崩溃信息,这真的是不好定位,在哪个界面也不知道,全局断电也没用,不知道楼主有没有好的解决方法呢?
yoyoso
yoyoso

引用来自“蚊香酱”的评论

我这两天也遇到了这个问题,听了你的将友盟注释掉,这回打印出来了错误信息,原来是我忘记removeObserver监听了10
解决问题就好
蚊香酱
蚊香酱
我这两天也遇到了这个问题,听了你的将友盟注释掉,这回打印出来了错误信息,原来是我忘记removeObserver监听了10
UITableView _dequeueReusableViewOfType:withIdentif

错误提示: PersonToPerson[2244:294551] *** Assertion failure in -[UITableView _dequeueReusableViewOfType:withIdentifier:], /SourceCache/UIKit/UIKit-3347.44.2/UITableView.m:6218 ......

gymg
2015/08/03
0
0
libc++abi.dylib: terminate_handler unexpectedly th

libc++abi.dylib: terminate_handler unexpectedly threw an exception 出现这个问题的原因很多! 原因1: 代码如下: 说明: 崩溃在第三行substringFromIndex,因为 range.location未取到值...

程序猿-樱木花道
2016/05/17
25
0
IOS [__NSCFString containsString:]报错、闪退、崩溃

[__NSCFString containsString:]: unrecognized selector sent to instance 0x16f45a80 libc++abi.dylib: terminate_handler unexpectedly threw an exception //- (BOOL)containsString:(NS......

Jack088
2016/01/14
166
0
一次从xib修改为纯代码带来的惨剧

今天在项目中遇到一个问题,是UICollectionView的一个DataSource方法- (UICollectionReusableView *)collectionView: viewForSupplementaryElementOfKind: atIndexPath:在同一个VC中被重复调......

yoyoso
2016/04/26
750
0
模拟器编译错误 Linker command failed with exit code 1 (use -v to see invocation)

现在的情况是真机可以运行,模拟器不可以,一编译就会报这种错误.请大神指点. (null): In '...../libc++abi.dylib', missing required architecture x86_64 in file ..../libc++abi.dylib (3 ......

lidings
2015/09/28
382
0

没有更多内容

加载失败,请刷新页面

加载更多

移植Modbus到STM32F103(2):移植FreeModbus到usart3并运行示例代码

FreeModbus是Modbus的一个被广泛移植的实现。其源码在github,最新版是1.6。 FreeModbus支持Modbus功能码里的0x01~0x06,0x0F~0x11和0x17,对一些功能比如异常诊断和读事件计数等功能码并没有...

Konstantine
今天
3
0
浅谈神经网络(神经网络篇)

背景 之前写过浅谈神经网络基础篇,简单介绍下机器学习这块内容,用于扫盲。本文正式将神经网络,这部分是深度学习的基础。了解完可以掌握强大的机器学习的方法,也可以更好的了解深度学习。...

Uknowzheng
今天
4
0
移动硬盘变为RAW格式后的修复

在Mac上使用自己的移动硬盘结果文件系统格式变为RAW; 在自己windows笔记本上使用chkdsk H: /F进行修复,修复日志如下: C:\Users\mengzhang6>chkdsk H: /F文件系统的类型是 NTFS。卷标是 do...

晨猫
今天
3
0
10 Git —— 标签管理

10 Git —— 标签管理 本节内容: 命令git tag <tagname>用于新建一个标签,默认为HEAD,也可以指定一个commit id;命令git tag -a <tagname> -m "blablabla..."可以指定标签信息;命令git......

lwenhao
今天
4
0
小程序设置垂直居中,水平居中

如果子容器中的view需要居中的话,那需要在父容器中设置居中 水平居中: display: flex; flex-direction: column; align-items: center; 垂直居中 display: flex;align-items: cen...

淘幻幻
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部