在进行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的更多相关文章

  1. Xcode 出现Thread 1: signal SIGABRT

    代码语言:C 出现原因:数组初始化时,循环赋值越界. 例 bool type [30]; for (int i = 0;i<100;i++) type = 0;

  2. iOS 调试 crash breakpoint EXC_BAD_ACCESS SIGABRT

    原文地址:iOS 调试 crash breakpoint EXC_BAD_ACCESS SIGABRT作者:流年若离殇 在调试程序的时候,总是碰到crash的bug,而且一追踪就是一些汇编的代码,让人 ...

  3. ios中的奇怪崩溃Signal和EXC_BAD_ACCESS错误分析

    什么是Signal 在计算机科学中,信号(英语:Signals)是Unix.类Unix以及其他POSIX兼容的操作系统中进程间通讯的一种有限制的方式.它是一种异步的通知机制,用来提醒进程一个事件已经发 ...

  4. Application received signal SIGABRT

    Application received signal SIGABRT (null) (( 0 CoreFoundation 0x0000000182bbadc8 <redacted> + ...

  5. Xcode真机调试报错(证书的签发者无效)

    Xcode真机调试时报错: dyld: Library not loaded: @rpath/libswiftAVFoundation.dylib Referenced from: /var/mobi ...

  6. xcode 真机调试 failed to get the task for process xxx

    xcode 真机调试 failed to get the task for process xxx 此错误原因是,使用 in house profile 签名了真机调试的证书: 在 target--- ...

  7. [转]使用 Minidumps 和 Visual Studio .NET 进行崩溃后调试

    本文关键字:Minidumps, Windows, SEH, VisualC, .NET 摘要 本文讲述了 minidumps 是怎样工作的.当你的程序崩溃的时候应该如何生成它们.以及如何在 Visu ...

  8. Xcode 静态库调试策略

    Xcode 静态库调试策略  (已经有现成的工程和静态库源码)    ***** 为安全期间建议备份一下静态库 Step1: 下载最新的工程[工程中有所要测试的静态库和头文件需要删除]: Step2: ...

  9. Xcode真机调试iOS10中Nslog 打印不出东西

    Xcode真机调试iOS10中Nslog 打印不出东西 解决方案 通过以下途径找到 Product->Scheme->EditScheme ios9以前的 如果不加 1 的那句 在xcod ...

随机推荐

  1. gnome3

    http://askubuntu.com/questions/67753/how-do-i-add-an-application-to-the-dash https://wiki.gnome.org/ ...

  2. 国内的cdn

    测试了一下,百度的非常快 ----------------------------------------------------------------------- 原文:https://www. ...

  3. ANT 操控 ORACLE数据库实践

    Ant 执行系统命令没有任何问题,这次实际系统命令中可以说遇到了两个问题,一个是启动服务的命令是含有空格的,第二个如何备份数据库可以自动加上日期. 首先,我们启动oracle数据库,操作有两个: 1. ...

  4. 8.2 sikuli 集成进eclipse 报错:Getting the VisionProxy.dll: Can not find dependent libraries...

    如果在执行脚本的时候出现以下错误: Getting the VisionProxy.dll: Can not find dependent libraries... 把Sikuli X 的libs目录 ...

  5. 设置TabBar分栏控制器上图片的大小问题

    我们都知道,iOS因为屏幕分辨率的问题,UID在交付我们iOS开发人员程序配图的时候,一般是三套图,分别对应三种不同的分辨率,对不同size的屏幕系统会自动使用不同像素的图片,我们只需要在命名时给三套 ...

  6. Centos 6.4下使用VSFTPD无法正常连接与无法上传文件的问题解决

    发表于 2014 年 4 月 13 日 作者 SCKA 最近利用Linux搭建服务器 搭建FTP的时候决定使用VSFTP搭建,结果却出现了无法正常连接与无法上传文件等诸多问题 经过许久的努力,终于让V ...

  7. IO流---字符流(FileWriter, FileReader ,BufferedWriter,BufferedReader)

    IO   Input  Output IO流用来处理设备之间的数据传输. java对数据的操作是通过流来实现的. 流按流向分:输入流,输出流     是相对内存而言的.把硬盘的数据读取到内存中就是输入 ...

  8. 用 Swift 编写面向协议的网络请求

    和我一起参加9 月 1 日 - 9月 2 日在纽约举办的 Swift 社区庆典

  9. 【转】对于JNI方法名,数据类型和方法签名的一些认识

    [转]对于JNI方法名,数据类型和方法签名的一些认识   之前一直用jni,但是没有考虑Java重载函数,如何在jni-C++里命名,今天看到一篇文章,讲到了类型签名. 原文链接:http://www ...

  10. 快学Scala-第六章 对象

    知识点: 1.单例对象 使用object语法结构达到静态方法和静态字段的目的,如下例,对象定义某个类的单个实例,包含想要的特性,对象的构造器在该对象第一次被使用时调用. object Account{ ...