IOS

ios crash log 分析

ios crash log 分析

Posted by nomadli on January 4, 2016

Xcode7的Organizer集成了查看崩溃日志的功能,如果无法解析

正常分析

  1. 将.app文件夹、dSYM文件夹、crash文件放在同一个路径下
  2. export DEVELOPER_DIR=”/Applications/Xcode.app/Contents/Developer”
  3. alias symbolicatecrash=’/Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/Current/Resources/symbolicatecrash’
  4. symbolicatecrash -v crash_to_convert.crash > converted.crash

查看是否文件匹配

  1. xcrun dwarfdump –uuid Crash.app/Crash
  2. xcrun dwarfdump –uuid Crash.app.dSYM
  3. log 中Binary Images:行类似arm64<…>

重新索引

  1. mdimport 文件夹名, 文件夹中包含app 和 dsym

手动查看地址对应的信息

  1. dwarfdump –lookup 0x…36d2 –arch arm64 *.app.dSYM
  2. 主动crash @throw NSInternalInconsistencyException;
  3. strcpy(0, “bla”);

定位代码行

  1. atos -arch armv7 -o appName.app/appName -l 基地址 错误地址(基地址在Binary Images:开头)

编译时设置

  1. Generate Debug Symbols 生成符号选择,最好是生成文件
  2. 静态库 Strip Debug Symbols During Copy: No
  3. 静态库 Strip Style: Debugging Symbols
  4. 静态库 Strip Linked Product: No
  5. app Strip Debug Symbols During Copy: Yes
  6. app Strip Style: All Symbols
  7. app Strip Linked Product: Yes
  8. 不捕获异常 no_compact_unwind,crash日志信息将无法解析

报告

  1. 内存访问错误 EXC_BAD_ACCESS、SIGSEGV、SIGBUS
  2. 未捕获的object异常 EXC_CRASH、SIGABRT
  3. 跟踪异常运行时判断异常EXC_BREAKPOINT、SIGTRAP
  4. 访问受保护的文件句柄异常 EXC_GUARD 1 close,2 dup dup2 fcntl,4 操作受保护的socket, 16 写受保护的文件
  5. 请求过多的资源 EXC_RESOURCE,WAKEUPS线程频繁唤起,MEMORY 过多内存
  6. 用户硬关机 0xbaaaaaad
  7. VOIP应用被杀死因为频繁唤起 0xbad22222
  8. 主线程长时间运行不响应 0x8badf00d
  9. 占用太高cpu 0xc00010ff
  10. 在后台运行使用系统资源(访问通讯录) 0xdead10cc
  11. 用户强制关机 0xdeadfa11

汇编

  1. Assembly File .s 后缀
  2. 函数名_开头,在非汇编中声明或使用时去掉
  3. c注释 .text 开始代码
  4. .align 4对其
  5. .globl funname 只支持全局函数
  6. .arm 开始arm指令
  7. .thumb 开始thumb或thumb-2指令
  8. .thumb_func重新修饰函数名
  9. #if、#else、#endif、#ifdef、#ifndef、#elif
  10. 预定义 i386 x86_64 arm arm64
  11. 查看预定义宏 clang -arch arm64 -E -dM - < /dev/null

问题

  • sudo /Developer3/Library/uninstall-devtools -mode=all 卸载多个xcode
  • xcode-select -switch /Developer 选择/Developer目录