libc++abi.dylib: terminate_handler unexpectedly threw an exception错误小结

转载 2015年07月09日 10:50:43

前言

我们在运行xcode工程时,有时候会遇到”libc++abi.dylib: terminate_handler unexpectedly threw an exception”错误,app莫名其妙就crash掉了,在控制台输入bt命令,查看调用堆栈,结果也是一头雾水:

libc++abi.dylib: terminate_handler unexpectedly threw an exception错误小结0

分析

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

解决

解决办法很简单,赋值的时候进行类型转换: 
    //mutableArr:可变数组 arr:不可变数组
    //mutableDic:可变字典 dic:不可变字典
    //赋值时,需要进行可变类型转换
    mutableArr = [NSMutableArray arrayWithArray:arr];
    mutableDic = [NSMutableDictionary dictionaryWithDictionary:dic];

libc++abi.dylib: terminate_handler unexpectedly threw an exception错误小结

前言 我们在运行xcode工程时,有时候会遇到”libc++abi.dylib: terminate_handler unexpectedly threw an exception”错误,app莫名...
  • SoulHao
  • SoulHao
  • 2015年01月21日 10:50
  • 25537

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

2015-04-03 18:16:10.077 YFFamilyMall[9283:256070] NSScanner: nil string argument 2015-04-03 18:16:10...
  • zhouxiangstudying
  • zhouxiangstudying
  • 2015年04月03日 18:16
  • 2528

解决libc++abi.dylib: terminate_handler unexpectedly threw an exception(1)

xcode升级过程中出现这样的问题NSScanner: nil string argument NSScanner: nil string argument libc++abi.dylib: term...
  • zww1984774346
  • zww1984774346
  • 2015年12月25日 12:21
  • 1208

对于libc++abi.dylib: terminate_handler unexpectedly threw an exception 异常处理如何调试错误

在iOS开发时,有时候遇到libc++abi.dylib handler threw exception这样的异常,  虽然在断点出加上了All Exceptions,也断到相应的代码了,但是没打印对...
  • xiaoyao_li
  • xiaoyao_li
  • 2014年07月18日 09:38
  • 6319

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

在运行一个界面的时候,就是一直libc++abi.dylib: terminate_handler unexpectedly threw an exception,也没有指明是哪里错误,后来经检查发现...
  • darongzi1314
  • darongzi1314
  • 2015年06月09日 11:12
  • 1347

libc++abi.dylib: terminate_handler unexpectedly threw an exception错误

前言 我们在运行xcode工程时,有时候会遇到”libc++abi.dylib: terminate_handler unexpectedly threw an exception”错误,a...
  • zxc110110
  • zxc110110
  • 2015年01月28日 15:10
  • 2182

iOS报错terminate_handler unexpectedly threw an exception

今天遇到了一个非常奇葩的坑,但是我又不得不承认这也算是一个bug。 由于感觉这可能是万分之一的踩坑概率,所以我想把这个记录下来, 万一有和我一样莫名其妙被坑的人呢,嘿嘿...... ...
  • meyin
  • meyin
  • 2017年07月13日 10:54
  • 372

libc++abi.dylib: terminate_handler unexpectedly threw an exception 报错

运行xcode工程时,有时候会遇到”libc++abi.dylib: terminate_handler unexpectedly threw an exception”错误,app莫名其妙就cr...
  • UIApplicationMain
  • UIApplicationMain
  • 2015年07月29日 09:58
  • 939

解决报错libc++abi.dylib: terminate_handler unexpectedly threw an exception

libc++abi.dylib是一个动态库,动态错误一般是由动态错误引起。 for(NSMutableDictionary *downloadInfo in downloadingArray) ...
  • u011731076
  • u011731076
  • 2015年11月28日 15:12
  • 268

iOS libc++abi.dylib: terminate_handler unexpectedly threw an exception

Clean the project. Check each constraints and remove the corrupted one. Clean project again, it shou...
  • alincexiaohao
  • alincexiaohao
  • 2015年11月19日 10:59
  • 784
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:libc++abi.dylib: terminate_handler unexpectedly threw an exception错误小结
举报原因:
原因补充:

(最多只允许输入30个字)