• iOS crash 追终 ,iOS 如何定位crash 位置


    https://developer.apple.com/library/ios/technotes/tn2151/_index.html

    错误分析是基于设备中的crash log 与 编译文件时生成的dsYM文件相结合得出的结果,crash log 中包含应用的 crash trace stack,dsym中包含应用的符号表信息,符号表信息用于匹配程序中的文件,函数,代码,行号。

    一、可用crash trace 追踪的crash

    二、low memery 是追踪不到的因为没有对应以下的这类型的符号

    1)EXC_BAD_ACCESS

    SIGSEGV: 通常由于重复释放对象导致,这种类型在切换了ARC以后应该已经很少见到了。

    SIGABRT:  收到Abort信号退出,通常Foundation库中的容器为了保护状态正常会做一些检测,例如插入nil到数组中等会遇到此类错误。
    SEGV:(Segmentation  Violation),代表无效内存地址,比如空指针,未初始化指针,栈溢出等;

    SIGBUS:总线错误,与 SIGSEGV 不同的是,SIGSEGV 访问的是无效地址,而 SIGBUS 访问的是有效地址,但总线访问异常(如地址对齐问题)

    SIGILL:尝试执行非法的指令,可能不被识别或者没有权限
    2)EXC_BAD_INSTRUCTION

    3)EXC_ARITHMETIC

    不用第三方工具,如何分析?

    首先,确保在release(Ad Hoc或者App Store)一个版本时,保存了对应的xxx.app和xxx.dSYM文件。
    其次,验证xxx.crash、xxx.app和xxx.dSYM三者的uuid是否一致。
    验证方法:
    1)xxx.app。dwarfdump --uuid mobileguard.app/mobileguard
    2)xxx.dSYM。dwarfdump --uuid mobileguard.app.dSYM/Contents/Resources/DWARF/mobileguard
    3)xxx.crash。
    确保三者uuid一致以后,用symbolicatecrash工具生成易读的日志信息。

    先准备环境:
    1)链接symbollicatecrash到/usr/bin/中,就可以直接使用sybollicatecrash命令。ln -s /Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/symbolicatecrash /usr/bin/symbolicatecrash
    2)设置xcode DEVELOPER_DIR。export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer”
    然后执行命令:symbolicatecrash m.crash mobileguard.app.dSYM > n.crash

    当然是有 分析工具可以用的:

    Crashlystics (twitter,使用自动集成工具,通过上传dsym文件形式,强烈推荐使用,简单,好用,定位问题快,准)

    Bugly (腾讯,用相应的jar 将dsym分析后上传至腾讯服务器)

    MoClick (友盟,需下载crash log 并用相应的工具解析)

    Hockeyapp (微软,需上传dsym文件,收费,有自动集成工具)

  • 相关阅读:
    python异常处理
    装饰器汇总
    PHP PDO预定义常量
    [转载]Firebird与MySQL:一个使用者的体会
    卸载AppDomain动态调用DLL异步线程执行失败
    c#数据库访问读取数据速度测试
    iis最大工作进程数
    WINCE 获取智能设备唯一编号
    通过 JDBC 驱动程序使用大容量复制
    IIS出现问题时修改配置文件的几项说明
  • 原文地址:https://www.cnblogs.com/codetime/p/6124197.html
Copyright © 2020-2023  润新知