Xcode7的Organizer集成了查看崩溃日志的功能,如果无法解析
正常分析
- 将.app文件夹、dSYM文件夹、crash文件放在同一个路径下
- export DEVELOPER_DIR=”/Applications/Xcode.app/Contents/Developer”
- alias symbolicatecrash=’/Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/Current/Resources/symbolicatecrash’
- symbolicatecrash -v crash_to_convert.crash > converted.crash
查看是否文件匹配
- xcrun dwarfdump –uuid Crash.app/Crash
- xcrun dwarfdump –uuid Crash.app.dSYM
- log 中Binary Images:行类似arm64<…>
重新索引
- mdimport 文件夹名, 文件夹中包含app 和 dsym
手动查看地址对应的信息
- dwarfdump –lookup 0x…36d2 –arch arm64 *.app.dSYM
- 主动crash @throw NSInternalInconsistencyException;
- strcpy(0, “bla”);
定位代码行
- atos -arch armv7 -o appName.app/appName -l 基地址 错误地址(基地址在Binary Images:开头)
编译时设置
- Generate Debug Symbols 生成符号选择,最好是生成文件
- 静态库 Strip Debug Symbols During Copy: No
- 静态库 Strip Style: Debugging Symbols
- 静态库 Strip Linked Product: No
- app Strip Debug Symbols During Copy: Yes
- app Strip Style: All Symbols
- app Strip Linked Product: Yes
- 不捕获异常 no_compact_unwind,crash日志信息将无法解析
报告
- 内存访问错误 EXC_BAD_ACCESS、SIGSEGV、SIGBUS
- 未捕获的object异常 EXC_CRASH、SIGABRT
- 跟踪异常运行时判断异常EXC_BREAKPOINT、SIGTRAP
- 访问受保护的文件句柄异常 EXC_GUARD 1 close,2 dup dup2 fcntl,4 操作受保护的socket, 16 写受保护的文件
- 请求过多的资源 EXC_RESOURCE,WAKEUPS线程频繁唤起,MEMORY 过多内存
- 用户硬关机 0xbaaaaaad
- VOIP应用被杀死因为频繁唤起 0xbad22222
- 主线程长时间运行不响应 0x8badf00d
- 占用太高cpu 0xc00010ff
- 在后台运行使用系统资源(访问通讯录) 0xdead10cc
- 用户强制关机 0xdeadfa11
汇编
- Assembly File .s 后缀
- 函数名_开头,在非汇编中声明或使用时去掉
- c注释 .text 开始代码
- .align 4对其
- .globl funname 只支持全局函数
- .arm 开始arm指令
- .thumb 开始thumb或thumb-2指令
- .thumb_func重新修饰函数名
- #if、#else、#endif、#ifdef、#ifndef、#elif
- 预定义 i386 x86_64 arm arm64
- 查看预定义宏 clang -arch arm64 -E -dM - < /dev/null
问题
- sudo /Developer3/Library/uninstall-devtools -mode=all 卸载多个xcode
- xcode-select -switch /Developer 选择/Developer目录