一、使用流程
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://*.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
macOS下利用dSYM文件将crash文件中的内存地址转换为可读符号的更多相关文章
-
【java】 linux下利用nohup后台运行jar文件包程序
Linux 运行jar包命令如下: 方式一: java -jar XXX.jar 特点:当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出 那如何让窗口不锁定? 方式二 ...
-
html文件在head标签中引入js地址和直接写js代码,所用时间是不同的,因为引入js地址,文件加载的时候需要通过通讯协议去解析地址,读取外部文件
html文件在head标签中引入js地址和直接写js代码,所用时间是不同的,因为引入js地址,文件加载的时候需要通过通讯协议去解析地址,读取外部文件
-
C# 下利用ICSharpCode.SharpZipLib.dll实现文件/目录压缩、解压缩
ICSharpCode.SharpZipLib.dll下载地址 1.压缩某个指定文件夹下日志,将日志压缩到CompressionDirectory文件夹中,并清除原来未压缩日志. #region 压缩 ...
-
Linux下利用rsync实现多服务器文件同步
windows做为文件服务器,使用rsync的windows服务版本,然后配置好就可以了.需要的朋友可以参考下. windows做为文件服务器,使用rsync的windows服务版本:cwRsyncS ...
-
linux下利用nohup后台运行jar文件包程序
Linux 运行jar包命令如下: 方式一: java -jar XXX.jar 特点:当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出 那如何让窗口不锁定? 方式二 ...
-
javaWeb项目springMVC框架下利用ITextpdf 工具打印PDF文件的方法(打印表单、插入图片)
方法一:打印PDF表单以及在PDF中加入图片 需要的资料: jar包:iTextAsian.jar ,itext-2.1.7.jar: 源码: public static void main(Stri ...
-
linux下 利用 rz 命令上传文件
1. 如何安装? 1)编译安装 root 账号登陆后,依次执行以下命令: # cd /tmp # wget http://www.ohse.de/uwe/releases/lrzsz-0.12.20 ...
-
macos下查看用户组,以及修改文件权限
查看当前用户所属组 groups 查看指定用户所属组 groups username 更改权限 将单个文件更改为777权限 chmod 777 aaa.txt 更改文件夹所属组 sudo chown ...
-
MacOS下Rails+Nginx+SSL环境的搭建(中)
三.配置Nginx 先是修改 hosts 文件,意思是创建一个本地域名以便我们访问,比如: $ sudo subl /etc/hosts 127.0.0.1 rails_project.local 但 ...
随机推荐
-
List中存储同一个对象(内容不同)
List中存储同一个对象,前面的会被后存入的对象覆盖,解决方法:每次存入新的对象
-
Spark SQL概念学习系列之为什么使用 Spark SQL?(二)
简单地说,Shark 的下一代技术 是Spark SQL. 由于 Shark 底层依赖于 Hive,这个架构的优势是对传统 Hive 用户可以将 Shark 无缝集成进现有系统运行查询负载. 但是也看 ...
-
C#导入导出Excel表的数据
一:C#导入导出EXCEL文件的类 代码如下: 首先将Microsoft Excel 14.0 Object Library 引用导入 using System; using System.Data; ...
-
Linux编程return与exit区别
Linux编程return与exit区别 exit 是用来结束一个程序的执行的,而return只是用来从一个函数中返回. return return 表示从被调函数返回到主调函数继续执行,返回时可附 ...
-
bootstrap 架构知识点
.col-md-pull-2 向右相对定位偏移量 .col-md-push-2 向左相对定位偏移量 .pull-left 左浮动 .pull-right 右浮动 改变大小写 通过这几个类可以改 ...
-
由sql注入联想到PreparedStatement
PreparedStatement极大地提高了安全性. 即使到目前为止,仍有一些人连基本的恶意SQL语法都不知道. String sql = "select * from tb_ ...
-
LeetCode(40):组合总和 II
Medium! 题目描述: 给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candidates 中的每个数 ...
-
Spring Aop AfterReturning接收返回值
包结构: Spring.xml UserDao.java 测试类Main方法 LogAspect.java 测试结果: @AfterReturning标签属性分析: value值: 可以写Aop的表达 ...
-
邮件的DNS设置
为了反垃圾,在发件人使用的域名下面最好配置两条DNS记录:SPF和DKIM,他们都是用来反垃圾的,邮件接受服务器会检查这两项,只有符合要求才会进入用户的邮箱. 一般来说,大批量发送邮件时,我们会使用第 ...
-
SQL2000数据库修改sa密码
开始——程序——Microsoft SQL Server——企业管理器 2 展开数据库Microsoft SQL Server—— SQL Server组——安全性——登录——双击sa 3 在常规内有 ...