现在有很多的第三方服务SDK都支持错误堆栈信息符号化,常见的友盟、bugly等
但是我们只知道通过他的操作步骤,定位具体的代码,
那么如何通过自己的方式定位呢?

首先我们每次通过Xcode打包的时候都会产生一个.dsym文件,你在这里可以找到

然后再右键-->显示包内容,就可以找到当前打包出来的dsym文件了,如下:

我们可以用命令行检查一下dsym 所支持的UUID,此UUID可以确定设备的架构类型(arm64, armv7, armv7s 等)
通过命令行:dwarfdump --uuid xxx(.app.dsym)

最后我们可以利用这个文件定位错误代码的具体的位置。
定位错误命令行:
xcrun atos -o xxx(.dsym路径下的APP) -arch armv7/armv7s/arm64(选其一) -l xxx(起始地址) xxx(运行地址)

注意在错误堆栈信息里面的地址:结束地址需要转换成十六进制

在此,给大家提供一个获取APP的运行时的UUID方法,方便以后分析和定位错误代码,将当前版本的UUID和错误的堆栈信息可以发给开发者或者是上传到服务器,这样在开发拿到你的信息之后,通过上面的步骤就可以快速定位错误代码了
#import <mach-o/dyld.h>
#import <mach-o/loader.h>static NSUUID *ExecutableUUID(void)
{const struct mach_header *executableHeader = NULL;for (uint32_t i = 0; i < _dyld_image_count(); i++){const struct mach_header *header = _dyld_get_image_header(i);if (header->filetype == MH_EXECUTE){executableHeader = header;break;}}if (!executableHeader)return nil;BOOL is64bit = executableHeader->magic == MH_MAGIC_64 || executableHeader->magic == MH_CIGAM_64;uintptr_t cursor = (uintptr_t)executableHeader + (is64bit ? sizeof(struct mach_header_64) : sizeof(struct mach_header));const struct segment_command *segmentCommand = NULL;for (uint32_t i = 0; i < executableHeader->ncmds; i++, cursor += segmentCommand->cmdsize){segmentCommand = (struct segment_command *)cursor;if (segmentCommand->cmd == LC_UUID){const struct uuid_command *uuidCommand = (const struct uuid_command *)segmentCommand;return [[NSUUID alloc] initWithUUIDBytes:uuidCommand->uuid];}}return nil;
}
运行UUID参考资料:
http://stackoverflow.com/questions/19848567/how-to-get-the-build-uuid-in-runtime-and-the-image-base-address

iOS 如何根据错误的堆栈地址定位到代码?相关推荐

  1. 嵌入式 linux下利用backtrace追踪函数调用堆栈以及定位段错误

    嵌入式 linux下利用backtrace追踪函数调用堆栈以及定位段错误 2015-05-27 14:19 184人阅读 评论(0) 收藏 举报  分类: 嵌入式(928)  一般察看函数运行时堆栈的 ...

  2. Xcode:崩溃堆栈符号化,定位崩溃

    首先,进行常识"脑补". 1. 符号表是什么? 符号表就是指在Xcode项目编译后,在编译生成的二进制文件.app的同级目录下生成的同名的.dSYM文件. .dSYM文件其实是一个 ...

  3. 程序退出,段错误segment default问题定位

    1.backtrace和backtrace_symbols函数 这两个函数的主要作用是打印出函数的调用方式,即压栈的信息. 使用方法: static void dump(void) {  void * ...

  4. ios友盟错误_iOS - 友盟错误分析

    修复.jpg 前提应用集成了友盟的bug收集功能. 友盟的错误分析.错误列表里面有数据. 正题 错误详情.png 错误列表 点击进去基本上都是这个样子,这并不能方便我们及时定位到错误地方. 解决先把你 ...

  5. Linux内核中oops 错误解析以及问题定位

    目录 一.oops输出解析 二.工具 1.objdump 2.gdb 3.addr2line 4.decodecode 5.faddr2line 文档最后有完整的oops输出文件,此处将输出分成多个小 ...

  6. 开源:推荐一个不错的离线IP地址定位库

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | https://gitee.com/lions ...

  7. 研究表明:安卓和iOS应用无节操滥用邮箱和定位数据

    某最新研究表明,73%的安卓应用会向第三方共享用户的邮箱地址,而47%的iOS用户会给第三方提供用户定位数据. 没有免费的午餐 英国广播公司BBC表示,这个研究成果来自于麻省理工学院.哈佛大学,以及卡 ...

  8. ios wifi 定位_一种IOS设备的集中式Wifi室内定位方法

    一种IOS设备的集中式Wifi室内定位方法 [技术领域] [0001] 本发明属于无线通信室内定位技术领域,具体涉及一种IOS设备的集中式Wifi室 内定位方法. [背景技术] [0002] 近年来, ...

  9. Ip2region 离线IP地址定位库

    Ip2region 是什么 ip2region v2.0 - 是一个离线IP地址定位库和IP定位数据管理框架,10微秒级别的查询效率,提供了众多主流编程语言的 xdb 数据生成和查询客户端实现. Gi ...

最新文章

  1. python 获取ip
  2. PCMCIA接口采集卡系列
  3. 无人车制胜关键:Apollo决策系统全面剖析
  4. java抠图边框颜色处理_java 实现抠图(项目应用场景:抠图章)
  5. java项目打war包
  6. r语言liftchart_R语言强大的绘图功能--附数据和代码
  7. Discuz3.2开启图片列表显示教程
  8. 【二分法】计蒜客:二分快速幂
  9. 4.3 朴素贝叶斯分类实战——新闻分类、垃圾邮件识别
  10. 蓝宝石会升级bios吗_蓝宝石显卡刷bios
  11. PHP 判断操作系统位数
  12. hadoop清理回收站
  13. 移动硬盘linux逻辑分区的区别,移动硬盘是否需要分区
  14. MinGW 和 MSYS 的手动安装与环境配置
  15. 【杭州SEO优化】网站建设细节分析!
  16. 美的冰箱微晶X探鲜计划,为你开启X种畅想!
  17. java手动/按模板生成word与excel
  18. python类变量和实例变量的区别
  19. MATLAB unwrap应用
  20. 计算机原理实验存储器,计算机组成原理实验存储器.pptx

热门文章

  1. Win 10系统修复,DISM
  2. math求旋转角度 python_Python根据欧拉角求旋转矩阵的实例
  3. 【转】bmp文件格式详解
  4. SnapGene教程,限制性内切酶克隆(Restriction Cloning)
  5. 马云给年轻人的人生规划课--梦想还是要有的,万一实现了呢
  6. uiautomator2+python自动化测试1-环境准备
  7. 怎样用c语言编程解多元方程组,C语言解多元一次方程组(矩阵法)
  8. HTML5 CSS3专题 纯CSS打造相册效果
  9. html+css制作3D七夕表白旋转相册特效
  10. linux poweroff 流程,Android poweroff 流程