• Xcode崩溃问题调试 signal SIGABRT&EXC_BAD_ACCESS


    在进行app开发过程中会遇到很多的问题,各种崩溃令人相当头疼。当然,解决bug的能力也体现了一个程序员的水平,现在来说一说开发中经常遇到的崩溃问题吧。

    常见崩溃问题: 一是signal SIGABRT, 二是EXC_BAD_ACCESS.

    一、signal SIGABRT 出现这样的崩溃一般有两个原因:1. 数组越界 

    输入:

      
        NSArray *array = [NSArray arrayWithObject:@"0"];
        
        NSString *str = [array objectAtIndex:1];
        
        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,它能把已释放的内存暂时保留,再次访问时会报告错误,并给出该块内存曾经的一些使用信息,帮助我们快速定位。

     

  • 相关阅读:
    OKR实施方法——关于思路和流程的思考
    如何制作一份疫情场所分布地图?(附数据和源码)
    经纬度编码方法推荐-plus code简介
    快递到车服务的实现思路和问题思考
    ACC自适应巡航控制系统介绍
    《无人驾驶》-了解无人驾驶最佳读物
    手把手教你制作微信小程序,开源、免费、快速搞定
    2点GPS坐标求方位角
    GPRS 应用详解_GPRSsim800c(转)
    STM32的ADC采样与多通道ADC采样(转)
  • 原文地址:https://www.cnblogs.com/losedMemory/p/5768742.html
Copyright © 2020-2023  润新知