macOS下利用dSYM文件将crash文件中的内存地址转换为可读符号
一、使用流程
Windows下的程序运行崩溃时,往往可以利用pdb文件快速解析出程序崩溃的具体位置,甚至可以对应到源代码的具体行数。macOS下的symbolicatecrash也具备相应的功能。对应于Windows下的pdb文件,macOS下的crash文件解析需要用到dSYM文件。这个文件正常情况下可能不会生成,需要在XCode进行设置。当程序崩溃时,通过symbolicatecrash对crash文件和dSYM文件中的符号进行映射,即可将crash文件中的内存地址转换为可读的字符串。以前的博文中也进行过总结,但是并没有具体实践。这次在macOS下开发的一个程序总是崩溃,于是打算利用dSYM文件来看看到底是哪里崩溃了。
按照常规套路,先还是把*.crash文件、*.dSYM文件放到一起来,再来调用symbolicatecrash命令。先建立symbolicatecrash的软链接:
然后运行命令开始解析crash文件:
提示说“DEVELOPER_DIR”没有定义,那么就给他个定义:
再次运行命令开始接下工作:
提示:Unsupported crash log version: 12。往上搜索了一番,并没有什么发现。倒是发现了一些链接转而求其次使用了其他方法,就是不全文解析crash文件。而是解析我们感兴趣的内存地址的符号。其方法是:先找到Image的load address,如下:
这里我的程序在内存中的加载位置为0x10c680000(尖括号中的字符串是程序的UUID)。再次找到我们感兴趣的内存地址,如下:
再次运行命令:
至此即可分析出特定地址的符号了,调试的时候也可以确定大致的位置了。至于为什么不能全文解析crash文件暂时还不清楚。
二、参考链接
1. http://stackoverflow.com/questions/40056263/symbolicate-crash-log-xcode-8-macos-app
2. https://gist.github.com/bmatcuk/c55a0dd4f8775a3a2c5a
3. http://blog.csdn.net/duanyipeng/article/details/46460245
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 从库mysqldump会导致复制中断
- DBA的福音,SQL审核利器-goinception
- 前端组件设计原则
- 分析网页 JavaScript Bundles 的几种方法
- 使用 DevTools 新增的 Issues 选项卡发现网页问题
- OpenCV绘制标记函数drawMarker()
- 【crossbeam系列】3 crossbeam-deque:work-stealing算法
- 【Rust日报】2020-08-21 RustConf研讨会在线举办
- 了解不同架构思维,赏析架构之美
- 【Rust日报】2020-08-22 google/autocxx - 高度自动化的rust调用c++,而且安全,时尚
- 【Rust日报】2020-08-24 理解 Rust 的切片
- 猿实战05——手把手教你拥有自己的代码生成器
- Java单元测试——容器内部测试
- Java单元测试——框架(三)——testNG
- Nginx系列:后端服务应用健康检测