zoukankan      html  css  js  c++  java
  • iOS 抓取崩溃信息

    抓取崩溃信息

    友盟

    • 使用友盟,省时省力

    自己写

    • 如果不能用第三方的,只能自己抓取,上传到自己的服务器

    • 在appDelegate里做初始化

        // 加入crash handler
        NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler);
        
        // 模拟错误信息
    //    NSArray *array = [NSArray arrayWithObject:@"0"];
    //    NSLog(@"%@", [array objectAtIndex:1]);
    
    
    /**
     * 实现NSUncaughtExceptionHandler方法
     */
    void uncaughtExceptionHandler(NSException *exception)
    {
        // 调用堆栈
        NSArray *arr = [exception callStackSymbols];
        // 错误reason
        NSString *reason = [exception reason];
        // exception name
        NSString *name = [exception name];
        
        // 根据自己的需求将crash信息记录下来,下次启动的时候传给服务器。
        // 尽量不要在此处将crash信息上传,因为App将要退出,不保证能够将信息上传至服务器
        
        [[NSUserDefaults standardUserDefaults] setObject:@"YES" forKey:@"isException"];
        [[NSUserDefaults standardUserDefaults] setObject:arr forKey:@"callStackSymbols"];
        [[NSUserDefaults standardUserDefaults] setObject:reason forKey:@"reason"];
        [[NSUserDefaults standardUserDefaults] setObject:name forKey:@"name"];
        
    }
    
    • 然后在合适的时间把这个信息上传到服务器,上传成功后改isExceptionYES

    Exception codes

    0x8badf00d错误码:Watchdog超时,意为“ate bad food”。
    0xdeadfa11错误码:用户强制退出,意为“dead fall”。
    0xbaaaaaad错误码:用户按住Home键和音量键,获取当前内存状态,不代表崩溃。
    0xbad22222错误码:VoIP应用(因为太频繁?)被iOS干掉。
    0xc00010ff错误码:因为太烫了被干掉,意为“cool off”。
    0xdead10cc错误码:因为在后台时仍然占据系统资源(比如通讯录)被干掉,意为“dead lock”。
    

    Exception types

    • 查看我们的crash分析报告邮件,会发现最经常遇到的错误类型是SEGV(Segmentation Violation,段违例),表明内存操作不当,比如访问一个没有权限的内存地址。
    • 当我们收到SIGSEGV信号时,可以往以下几个方面考虑:
      • 访问无效内存地址,比如访问Zombie对象;
      • 尝试往只读区域写数据;
      • 解引用空指针;
      • 使用未初始化的指针;
      • 栈溢出;
    • 此外,还有其它常见信号:
      • SIGABRT:收到Abort信号,可能自身调用abort()或者收到外部发送过来的信号;
      • SIGBUS:总线错误。与SIGSEGV不同的是,SIGSEGV访问的是无效地址(比如虚存映射不到物理内存),而SIGBUS访问的是有效地址,但总线访问异常(比如地址对齐问题);
      • SIGILL:尝试执行非法的指令,可能不被识别或者没有权限;
      • SIGFPE:Floating Point Error,数学计算相关问题(可能不限于浮点计算),比如除零操作;
      • SIGPIPE:管道另一端没有进程接手数据;
  • 相关阅读:
    Python----定义
    [转载]Morris Traversal方法遍历二叉树(非递归,不用栈,O(1)空间)
    彻底明白IP地址——计算相关地址
    [转载] 教你如何迅速秒杀掉:99%的海量数据处理面试题
    [转载]从B 树、B+ 树、B* 树谈到R 树
    [转载]Java抽象类和接口的学习
    [转载]字符串匹配的Boyer-Moore算法
    [转载]字符串匹配的KMP算法
    [转载]孤儿进程与僵尸进程[总结]
    [转载]Huffman编码压缩算法
  • 原文地址:https://www.cnblogs.com/songliquan/p/12784546.html
Copyright © 2011-2022 走看看