作家
登录

浅谈iOS Crash(一)

作者: 来源: 2017-07-21 17:29:36 阅读 我要评论

  •  
  • Exception Codes: -[NSNull integerValue]: unrecognized selector sent to instance 0x1a9d88ef8 at 0x00000001835c7014 
  •  
  • Crashed Thread: 0  
    • Exception Type异常类型:平日包含1.7中的Signal旌旗灯号和EXC_BAD_ACCESS,NSRangeException等。
    • Exception Codes:异常编码:
    • Crashed Thread:产生Crash的线程id

    5) 线程状况:闪退时存放器中的值。一般不须要这部分的信息,因为回溯部分的信息已经足够让你找出问题地点。

    1、Exception Type(异常类型)

    • Exception Type:平日包含Signal旌旗灯号 和 EXC_BAD_ACCESS,NSRangeException等。
    异常类型 可能的原因 调试办法 EXC_CRASH unrecognized selector All Exception Point EXC_BAD_ACCESS 内存拜访缺点 NSZombie SIGSEGV 引用了released对象 / 引用未init的对象 / 数组越界/ 试图往没有写权限的内存地址写数据 NSZombie SIGABRT 逻辑缺点导致的Crash,比如测验测验多次释放同一个没存 逻辑检查 SIGPIPE TCP忽然断开,再发送数据 添加signal(SIGPIPE,XX)

    具体旌旗灯号解释拜见iOS异常捕获(http://www.iosxxx.com/blog/2015-08-29-iosyi-chang-bu-huo.html)

    2、Exception Code(异常编码)

    • Exception Code:以一些文字开首,紧接着是一个或多个十六进制值。这些数值说清楚明了Crash产生的本质。
    • 大年夜Exception Code中,可以区搀扶Crash是因为法度榜样缺点、不法内存拜访照样其他原因。常见的异常编码如下表:
    异常编码 描述 0x8badf00d ate bad food ,表示应用是因为产生watchdog超时而被iOS终止的。平日是应用花费太多时光而无法启动、终止或响应用体系事宜。 0xdeadfa11 dead fall,用户强迫退出。 0xbaaaaaad 用户按住Home键和音量键,获取当前内存状况,不代表崩溃。 0xbad22222 VoIP 应用因为过于频沉重启而被终止 0xc00010ff cool off,因为太烫了被干掉落 0xdead10cc dead lock,注解应用因为在后台运行时占用体系资本(如通信录数据库) 0xbbadbeef bad beef,产生致命缺点

    解释1:具体的异常编码代表的含义请参考:Hexspeak

    解释2:在后台义务列表中封闭已挂起的应用不会产生崩溃日记。 因为应用一旦被挂起,它何时被终止都是合理的。所以不会产生崩溃日记。

    四、Crash日记符号化

    1、概述

    线程回溯部分内容如下:

    1. 5 AppName 0x0000000100205280 0x0000000100028000 + 1954432 
    2.  
    3. 6 AppName 0x00000001002ae59c 0x0000000100028000 + 2647440  

    这两笔记录包含四列:(以第一笔记录为例子)

    • 帧编号—— 5(数字越小,产生时光越晚,产生次序越往后,越好锁定问题典范围)
    • 二进制库的名称 ——此处是 AppName.
    • 调用办法的地址 ——此处是 0x0000000100205280.
    • 第四列分为两个子列,一个根本地址和一个偏移量。此处是 x0000000100028000 + 1954432, 第一个数字指向文件,第二个数字指向文件中的代码行。

    解释2:符号化Crash日记须要获取对应的应用二进制文件以及生成二进制文件时产生的 .dSYM 文件(符号表)。必须完全匹配才行。不然,日记将无法被完全符号化。

    解释3: Xcode编译项目后,会获得同名的 dSYM 文件(符号表),dSYM 文件(符号表)是保存 16 进制函数地址映射信息的中转文件,我们调试的 symbols 都邑包含在这个文件中,并且每次编译项目标时刻都邑生成一个新的 dSYM 文件,位于 /Users//Library/Developer/Xcode/Archives 目次下,对于每一个宣布版本我们都很有须要保存对应的 Archives 文件。

    解释4:符号化可以应用Xcode的两种敕令 symbolicatecrash敕令 + atos敕令

    2、symbolicatecrash敕令

    1)首选找到symbolicatecrash敕令的地位

    1. find /Applications -name symbolicatecrash -type f   
    2.  
    3.   //我的本机敕令的地位:/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash  

    2)找到线上版本对应的xcarchive文件。大年夜中找到.dSYM和.app文件

    6) 二进制映像:闪退时已经加载的二进制文件。

    xcarchive地点的路径一般在: /Users//Library/Developer/Xcode/Archives 目次下

    3)获取crash日记文件


      推荐阅读

      如何在Linux中恢复仍在活动进程中的已删除文件

    cp 13 /home/m/Downloads/Compressed 因为我们已经知道文件名包含 .zip 扩大名,是以我们可以应用 .zip 扩大名进行搜刮。它将限制输出结不雅并显示所需的过程。很多情况下,删除的文件都可以恢复,比>>>详细阅读


    本文标题:浅谈iOS Crash(一)

    地址:http://www.17bianji.com/lsqh/36347.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)