利用.dSYM和.app文件准确定位Crash位置

当发布到iPhone上的应用程序Crash之后,iPhone会自动生成一个Crash Log(*.crash),这个文件包含了一些有用的调试信息,但对于堆栈,它只记录的函数地址,而无法显示函数名。函数名保存在一个叫dSYM的二进制文件中,即一个调试符号表文件。

首先,确保在release(Ad Hoc或者App Store)一个版本时,保存了对应的xxx.app和xxx.dSYM文件。

其次,验证xxx.crash、xxx.app和xxx.dSYM三者的uuid是否一致。

验证方法:

1)查看xxx.app的uuid。

[plain] view plaincopyprint?在CODE上查看代码片派生到我的代码片

  1. $ dwarfdump --uuid mobileguard.app/mobileguard  

2)查看xxx.dSYM的uuid。

[plain] view plaincopyprint?在CODE上查看代码片派生到我的代码片

  1. $ dwarfdump --uuid mobileguard.app.dSYM/Contents/Resources/DWARF/mobileguard  

3)xxx.crash。

上面两个UUID必须一样,而且必须跟Crash Log里面的UUID一致。打开Crash Log文件,在”Binary Images:”段中,YourApp后面的尖括号内的字符串就是UUID了。 
crash log uuid : armv7  <1dd5eb047491310f88cb7b1d7f61275c> /var/mobile/Applications/581404D9-FF06-455F-8251-846D41D18B40/

Note:

在这之前,需要找到对应的app和dSYM文件。这两个文件是在后缀为.archive的文件中,在我的机器(Mac OS 10.9.1,Xcode5.0.2)上,.archive文件在“/Users/mikelin/Library/Developer/Xcode/Archives/”文件夹下对应的日期文件夹中,也可以从Xcode > Organizer > Archive 下找到对应的Archive包。

确保三者uuid一致以后,用symbolicatecrash工具生成易读的日志信息。


首先找到symbollicatecrash工具在哪里:

find /Applications/Xcode.app -name symbolicatecrash -type f

你会找到:

/Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/symbolicatecrash


方法一:使用.crash文件和dsym文件

先准备环境:

1)将symbolicatecrash文件拷贝到和那三个文件的同级目录,此方法不需要.app文件

2)设置xcode DEVELOPER_DIR。

[plain] view plaincopyprint?在CODE上查看代码片派生到我的代码片

  1. export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer"  

然后执行命令:

[plain] view plaincopyprint?在CODE上查看代码片派生到我的代码片

  1. symbolicatecrash m.crash mobileguard.app.dSYM > n.crash  

转载:http://blog.csdn.net/jinzhu117/article/details/20615991


方法二:使用局部崩溃信息和.app文件

如果没有完整的.crash格式的崩溃文件,只有局部的崩溃信息,如下:

[plain] view plaincopyprint?在CODE上查看代码片派生到我的代码片

  1. Thread 0 Crashed:
    0   libobjc.A.dylib               0x00003ec0 objc_msgSend + 24
    1   MyApp                          0x000036d2 0×1000 + 9938 

其中:0x000036d2为栈地址,0×1000为偏移量

我们可以在控制台使用atos命令,解析出内存地址,此方法不需要.dsym文件

[plain] view plaincopyprint?在CODE上查看代码片派生到我的代码片

  1. atos -o MyApp.app/MyApp -arch arm64(崩溃日志中标明的架构) -l 0×1000(偏移量) 0x000036d2(栈地址) 
  2. 结果示例:__24-[MyApp initBase]_block_invoke.243 (in MyApp) (MyAppStart.m:286) 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/499914.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MVPVM模式介绍

一、概述MVPVM即&#xff1a;Model-View-Presenter-ViewModel。此模式是MVVM和MVP模式的结合体。但是交互模式发生了比较大的变化。MVVM参考本博客文章&#xff1a;iOS-MVVM-模式介绍MVP参考本博客文章&#xff1a;MVP模式介绍 二、原理&#xff1a;Presenter同时持有View、Mod…

分组密码的工作模式

一、理论基础1.概述密码学中&#xff0c;块密码的工作模式允许使用同一个块密码密钥对多于一块的数据进行加密&#xff0c;并保证其安全性。块密码自身只能加密长度等于密码块长度的单块数据&#xff0c;若要加密变长数据&#xff0c;则数据必须先被划分为一些单独的密码块。通…

PBOC3.0中使用的国密SM2算法

一、知识准备 PBOC3.0规范就是《中国金融集成电路&#xff08;IC&#xff09;卡规范》3.0版本。SM2是国密局推出的一种他们自己说具有自主知识产权的非对称商用密码算法。本身是基于ECC椭圆曲线算法的&#xff0c;所以要讲SM2, 先要弄懂ECC。 完全理解ECC算法需要一定的数学功底…

Markdown入门

Markdown 是一种轻量级的「标记语言」&#xff0c;它的优点很多&#xff0c;目前也被越来越多的写作爱好者&#xff0c;撰稿者广泛使用。看到这里请不要被「标记」、「语言」所迷惑&#xff0c;Markdown 的语法十分简单。常用的标记符号也不超过十个&#xff0c;这种相对于更为…

mysql数据库支持emoji表情的详解

mysql存储emoji表情的时候&#xff0c;就会报错&#xff0c;如下&#xff1a; Error updating database. Cause: java.sql.SQLException: Incorrect string value: ‘\xF0\x9F\x98\x8A\xF0\x9F…’ for column ‘这是我表中的字段’ at row 1 初步定位是我的数据库是utf8编码…

编程规范:长函数的思考

在工作&#xff0c;我们应该都不想看到非常的长函数。对于一个运行5年左右的项目&#xff0c;极有可能出现这种情况。由于长函数的长、if/else嵌套&#xff0c;导致代码的可读性非常差&#xff0c;这对于项目的维护和开发带来了极大的困难。所以我们应该避免写长函数&#xff0…

用redis实现延迟队列

现在在用的redis实现延迟队列的主流程

maven更新快照不起作用的解决方法

问题&#xff1a;maven的快照包更新后&#xff0c;调用方使用idea点下面这个地方更新maven&#xff0c;并没有拉到最新的快照 解决方法1 删除本地仓库的快照包&#xff0c;再重新拉一次 解决方法2 下图&#xff0c;这里点进去 下图&#xff0c;这个勾上就行了&#xff0c;再…

iOS中frame和Bounds之间的区别

frame frame是每个view必备的属性&#xff0c;代表的是当前视图的位置和大小&#xff0c;没有设置他&#xff0c;当前视图是看不到的。位置需要有参照物才能确定&#xff0c;数学中我们用坐标系来确定坐标系中的某个点的位置&#xff0c;iOS中有他特有的坐标系&#xff0c;如下…

[数据库]-----记一次mysql分库的操作(冷热分离)

前提: 1.原有库是mysql数据库,已经根据用户pin分片 2.每片是一主两从 3.主表已经分过表了 4.数据库所在服务器为4C8G 5.库中数据量已经超过千万,而且以每天3万多的数据持续增长,将来每天或许会更多 6.库内数据为订单数据&#xff0c;每时每刻都有新的订单产生&#xff0c;每个…

iOS网络请求认证挑战

一、引言 Http请求中认证挑战相关的代理如下&#xff1a; 1.将要发送一个认证挑战的请求 - connection:willSendRequestForAuthenticationChallenge:2.是否能够对一个保护空间进行认证&#xff08;已废弃&#xff09;- connection:canAuthenticateAgainstProtectionSpace:3.…

CDN的实现原理

一、传统模式 在描述CDN的实现原理前&#xff0c;让我们先看传统的未加缓存服务的访问过程&#xff0c;以便了解CDN缓存访问方式与未加缓存访问方式的差别&#xff1a; 用户提交域名→浏览器对域名进行解释→得到目的主机的IP地址→根据IP地址访问发出请求→得到请求数据并回复…

一个简单的权限系统模型

我们知道&#xff0c;一般说的简单的权限系统&#xff0c;都是使用shiro或者spring-security shiro之前用的比较多&#xff0c;原理也容易理解&#xff0c;算是比较成熟的权限方面的框架spring-security相对源码比较难懂&#xff0c;但由于与spring的完美融合&#xff0c;也有…

获取iOS任意线程调用堆栈(一)获取任意线程的调用栈地址列表

转载自&#xff1a;http://blog.csdn.net/jasonblog/article/details/49909163 如果要获取当前线程的调用栈&#xff0c;可以直接使用现有API&#xff1a;[NSThread callStackSymbols]。 但是并没有相关API支持获取任意线程的调用栈&#xff0c;所以只能自己编码实现。 1. 基础…

获取iOS任意线程调用堆栈(二)符号化理论:Mach-o文件结构

我们知道Windows下的文件都是PE文件&#xff0c;同样在OS X和iOS中可执行文件是Mach-o格式的。 所以我们如果要进行逆向分析&#xff0c;首先要熟悉Mach-o文件结构。 Mach-o包含三个基本区域&#xff1a; 头部&#xff08;header structure&#xff09;。 加载命令&#xff08;…

获取iOS任意线程调用堆栈(三)符号化理论:从Mach-o结构分析类名方法名

下面来讲讲如何从Mach-o文件中分析出类名和方法名&#xff0c;也让我们了解下class-dump的原理。 Mach-o结构有两个节&#xff1a;__objc_classname 和 __objc_methname 其中就是类名和方法名。 其中__objc_classname的偏移为&#xff1a;ox7961 __objc_methname的偏移为0x6…

获取iOS任意线程调用堆栈(四)符号化实战

转载自&#xff1a;http://blog.csdn.net/jasonblog/article/details/49909209 1. 相关API和数据结构 由于我们在上面回溯线程调用栈拿到的是一组地址&#xff0c;所以这里进行符号化的输入输出应该分别是地址和符号&#xff0c;接口设计类似如下&#xff1a; - (NSString *)s…

获取iOS任意线程调用堆栈(五)完整实现:BSBacktraceLogger

转载自&#xff1a;https://toutiao.io/posts/aveig6/preview BSBacktraceLogger 是一个轻量级的框架&#xff0c;可以获取任意线程的调用栈&#xff0c;开源在我的 GitHub&#xff0c;建议下载下来结合本文阅读。 我们知道 NSThread 有一个类方法 callstackSymbols 可以获取调…

Mac电脑如何彻底删除清除数据?CleanMyMac X软件更专业

虽然不用杀毒&#xff0c;但是日常的清理还是有必要的&#xff0c;特别是卸载一些软件会有残留&#xff0c;可以用命令mdfind来找&#xff0c;然后删&#xff0c;这里给新手用户推荐一款应用clean my mac x&#xff0c;定期清理一下&#xff0c;不用的时候关掉就可以。 CleanM…

Git的思想和基本工作原理

转载自&#xff1a;http://www.nowamagic.net/academy/detail/48160210# 在开始学习 Git 的时候&#xff0c;请不要尝试把各种概念和其他版本控制系统&#xff08;诸如 Subversion 和 Perforce 等&#xff09;相比拟&#xff0c;否则容易混淆每个操作的实际意义。Git 在保存和处…