Xcode崩溃问题调试 signal SIGABRT&EXC_BAD_ACCESS
在进行app开发过程中会遇到很多的问题,各种崩溃令人相当头疼。当然,解决bug的能力也体现了一个程序员的水平,现在来说一说开发中经常遇到的崩溃问题吧。
常见崩溃问题: 一是signal SIGABRT, 二是EXC_BAD_ACCESS.
一、signal SIGABRT 出现这样的崩溃一般有两个原因:1. 数组越界
输入:
NSArray *array = [NSArray arrayWithObject:@""]; NSString *str = [array objectAtIndex:]; NSLog(@"%@",str);
运行崩溃:
打印的崩溃信息:
Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayI objectAtIndex:]: index 1 beyond bounds [0 .. 0]',很明显给出的崩溃信息是数组越界,此时要仔细检查程序中的数组问题
2.调用的方法不存在:
输入:
[self performSelector:@selector(haha)];
运行崩溃,崩溃信息:
unrecognized selector sent to instance 0x7fcd584a1ae0
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[ViewController haha]: unrecognized selector sent to instance 0x7fcd584a1ae0'
说明该方法并不存在,所以造成崩溃
二、EXC_BAD_ACCESS一般是内存访问出错,对象内存已经释放,但仍然在访问会造成这样的后果
举个例子,在进行视频截图时,
generator是图片资源生成器
[generator generateCGImagesAsynchronouslyForTimes:@[currentSnipTime] completionHandler:^(CMTime requestedTime, CGImageRef _Nullable image, CMTime actualTime, AVAssetImageGeneratorResult result, NSError * _Nullable error) { NSLog(@"生成完成");
//主线程更新UI 如果是异步任务 : 在当前线程中继续执行,而不会等待该代码块执行完毕,也就是跳过了赋值的代码,造成野指针
dispatch_sync(dispatch_get_main_queue(), ^{
//EXC_BAD_ACCESS 野指针 访问不能使用的内存地址
self.snipImageView.image = [UIImage imageWithCGImage:image];
});
}];
所以当崩溃信息中出现了EXC_BAD_ACCESS这样的信息,可以分析哪些属性用weak修饰,或者线程异步/同步问题。当然我们还可以借助Xcode工具 点击Xcode的菜单:Product->Profile,启动Instruments 在Instruments模板中选择Zombies,它能把已释放的内存暂时保留,再次访问时会报告错误,并给出该块内存曾经的一些使用信息,帮助我们快速定位。
Xcode崩溃问题调试 signal SIGABRT&EXC_BAD_ACCESS的更多相关文章
- Xcode 出现Thread 1: signal SIGABRT
代码语言:C 出现原因:数组初始化时,循环赋值越界. 例 bool type [30]; for (int i = 0;i<100;i++) type = 0;
- iOS 调试 crash breakpoint EXC_BAD_ACCESS SIGABRT
原文地址:iOS 调试 crash breakpoint EXC_BAD_ACCESS SIGABRT作者:流年若离殇 在调试程序的时候,总是碰到crash的bug,而且一追踪就是一些汇编的代码,让人 ...
- ios中的奇怪崩溃Signal和EXC_BAD_ACCESS错误分析
什么是Signal 在计算机科学中,信号(英语:Signals)是Unix.类Unix以及其他POSIX兼容的操作系统中进程间通讯的一种有限制的方式.它是一种异步的通知机制,用来提醒进程一个事件已经发 ...
- Application received signal SIGABRT
Application received signal SIGABRT (null) (( 0 CoreFoundation 0x0000000182bbadc8 <redacted> + ...
- Xcode真机调试报错(证书的签发者无效)
Xcode真机调试时报错: dyld: Library not loaded: @rpath/libswiftAVFoundation.dylib Referenced from: /var/mobi ...
- xcode 真机调试 failed to get the task for process xxx
xcode 真机调试 failed to get the task for process xxx 此错误原因是,使用 in house profile 签名了真机调试的证书: 在 target--- ...
- [转]使用 Minidumps 和 Visual Studio .NET 进行崩溃后调试
本文关键字:Minidumps, Windows, SEH, VisualC, .NET 摘要 本文讲述了 minidumps 是怎样工作的.当你的程序崩溃的时候应该如何生成它们.以及如何在 Visu ...
- Xcode 静态库调试策略
Xcode 静态库调试策略 (已经有现成的工程和静态库源码) ***** 为安全期间建议备份一下静态库 Step1: 下载最新的工程[工程中有所要测试的静态库和头文件需要删除]: Step2: ...
- Xcode真机调试iOS10中Nslog 打印不出东西
Xcode真机调试iOS10中Nslog 打印不出东西 解决方案 通过以下途径找到 Product->Scheme->EditScheme ios9以前的 如果不加 1 的那句 在xcod ...
随机推荐
- 简单粗暴的“Debug模式”
在项目中,通常会遇到:调试程序和程序在线上运行时程序运行的参数不一样, 例如线上运行时程序是获取线上的机器的ip,而调试程序时,我们会指定一个ip进行调试. 又或者项目要与多个系统进行数据交换,调试的 ...
- 【jsp/servlet】 javaweb中的一些简单问题整理
1 jsp工作原理 答: 动态网页技术标准blabla...jsp程序的工作方式为请求/响应模式,客户端发出http请求,jsp程序收到请求后进行处理,并返回处理的结果. jsp程序需要运行在特定的w ...
- MFC DLL中导出函数模板
//my.h struct AFX_EXT_CLASS B { }; struct AFX_EXT_CLASS C { }; class AFX_EXT_CLASS A { public: templ ...
- jdk,tomcat配置
方法/步骤 一.安装JDK和Tomcat 1,安装JDK:直接运行jdk-7-windows-i586.exe可执行程序,默认安装即可. 备注:路径可以其他盘符,不建议路径包含中文名及特殊符号. 2. ...
- ajax遇到的问题
今天做了个小小的实验,用ajax XMLHttpRequest对象读取服务器上的txt文件里的内容,展示出来 直接把html文件放在桌面用浏览器打开,没有反应,部分代码如下: function oHt ...
- elasticsearch 性能调优
所有的修改都可以在elasticsearch.yml里面修改,也可以通过api来修改.推荐用api比较灵活 1.不同分片之间的数据同步是一个很大的花费,默认是1s同步,如果我们不要求实时性,我们可以执 ...
- ubuntu12.04 android studio 安装
ubuntu12.04 android studio 安装 分类: android 2014-02-17 15:57 10756人阅读 评论(0) 收藏 举报 1.下载JDK ,我下载的是jdk-7u ...
- springMVC的拦截器工作流程
首先,springmvc的拦截器配置在这就不多说了.主要讲一下拦截器的三个方法的执行顺序. preHandle方法一定是最先执行的方法,如果它返回为false下面的方法均不执行. postHandle ...
- STM32中断触发
使用PB1作为外部中断触发,按一次按键灯处于亮状态,在按一次灯灭. 1.先配置GPIO端口.复用管脚外设时钟使能GPIO_Config(); void GPIO_Config(void) { GPIO ...
- PHP 常识
PHP常识 1.谈谈你对MVC的认识,介绍几种目前比较流行的框架 由Model(M),View(V),Cntroller(C) 组成的一种设计模式,Model 主要处理一些业务处理类,View是页面显 ...