iOS 第三方dSYM定位BUG
iOS 如何找到或生成 .dSYM 文件
系统崩溃日志或者手机奔溃日志字段解释
第三方日志包含:友盟日志,talkingdata日志…
我这里以 talkingdata日志 举例:
reason: -[NSTaggedPointerString stringValue]: unrecognized selector sent to instance 0xa000038363133355
callStackSymbols: (0 CoreFoundation 0x000000018f2caff0 <redacted> + 1481 libobjc.A.dylib 0x000000018dd2c538 objc_exception_throw + 562 CoreFoundation 0x000000018f2d1ef4 <redacted> + 03 CoreFoundation 0x000000018f2cef4c <redacted> + 9164 CoreFoundation 0x000000018f1cad2c _CF_forwarding_prep_0 + 925 XFKD 0x000000010011e614 XFKD + 1074708 // 崩溃地址6 XFKD 0x000000010011ed64 XFKD + 1076580 // 崩溃地址7 XFKD 0x000000010011de2c XFKD + 1072684 // 崩溃地址8 libdispatch.dylib 0x000000018e1829e0 <redacted> + 249 libdispatch.dylib 0x000000018e1829a0 <redacted> + 1610 libdispatch.dylib 0x000000018e1910d4 <redacted> + 64411 libdispatch.dylib 0x000000018e192a50 <redacted> + 54012 libdispatch.dylib 0x000000018e1927d0 <redacted> + 12413 libsystem_pthread.dylib 0x000000018e38b1d0 _pthread_wqthread + 109614 libsystem_pthread.dylib 0x000000018e38ad7c start_wqthread + 4
)Process name: XFKD // App包名
dSYM UUID: B2707119-9ED6-35CB-B3B4-A9902B5CE8C0 // 当前 dSYM UUID
Architecture: arm64 // 当前的手机环境
Start Address: 0x100018000 // 起始地址
Slide Address: 0x18000 // 偏移地址
我们得到这个之后,那么久需要去找对应的. xcarchive文件,也就是你发布的时候留下的包,这个包的位置就在 Xcode->Window->Organizer,到了 Organizer 之后找到你对应的版本,也就是你这个BUG出现在哪个版本的包里,找到它之后 Show In Finder, 进入 . xcarchive 文件,在继续右键 显示包内容,找到:
如果,你不能确定这个BUG是这个包产生的,那么可以通过比较 dSYM UUID 来确定:
BUG的 dSYM UUID :B2707119-9ED6-35CB-B3B4-A9902B5CE8C0
BUG的 Architecture :arm64
我们可以将 xxxx.app.dSYM 文件拷贝出来放到一个新建的文件夹里面,这样方便我们操作。打开命令行工具 cd 到这个存放了 xxxx.app.dSYM 文件目录下,
比方我创建了一个 Test 文件夹存放 xxxx.app.dSYM, 那么我只需要 cd 到 Test 文件里面即可,好了,下一步我们打印这个 xxxx.app.dSYM 的 dSYM UUID,看看是否跟BUG的 dSYM UUID 是否一致
dwarfdump --uuid /Test/XFKD.app.dSYM
这行命令之后就会输入
UUID: F83F652E-4525-3052-A2E3-A74E7EC32E58 (armv7)
UUID: B2707119-9ED6-35CB-B3B4-A9902B5CE8C0 (arm64)
我们只需要比较BUG的 arm64 状态下的 UUID,那么它们是一致的。那么我们下面就开始来定位日志闪退位置。
atos -o XFKD.app.dSYM/Contents/Resources/DWARF/XFKD -arch arm64 -l 0x100018000 0x000000010011e614
其中 0x100018000:起始地址 0x000000010011e614:崩溃地址
崩溃地址一般为 崩溃信息中首行与你的App包名相关的地址 就是该例子中首行与 AppName 相关的地址信息(也就是崩溃信息中带有 XFKD 的567行)。
最后输出:
closure #1 in static KTTLog.insert(_:_:_:_:_:_:_:_:_:) (in XFKD) (KTTLog+Version.swift:30)
就是说crash的位置在 KTTLog+Version 文件中的 第30行。
最后我也还告诉一下大家在使用第三方工具定位日志的时候 dSYMTools 这个工具,不知道是不是我不会用还是使用有问题,我这边发现 dSYMTools 自己扫描出来的 dSYM UUID 始终无法跟正确的 xxxx.app.dSYM 文件里面或者是BUG的 dSYM UUID 对应上,也就是说工具上的 dSYM UUID 跟 文件或者BUG的 dSYM UUID 对应不上,就导致定位不了,很郁闷,不知道是不是我使用有问题,如果有会使用 dSYMTools 请告诉我下原因。
iOS 第三方dSYM定位BUG相关推荐
- iOS 利用dSYM定位crash
What is dSYM ? xCode 的每一次编译都会生成一个dsym文件,在其内部存储了16进制函数地址的映射. 在App实际执行的二进制文件中,是通过地址来调用方法,所以在App Crash ...
- 在 iOS 客户端上通过 bitcode 为第三方库修复 bug
摘要 本文主要记录了 iOS 移动端的一个疑难 bug 的排查过程,以及介绍通过给 bitcode 打补丁重新生成机器码,为有问题的第三方库修复 bug 的方法. 主要涉及到的知识点如下: ARM 汇 ...
- 常用的iOS第三方框架
转载自:https://github.com/Tim9Liu9/TimLiu-iOS 目录 UI 下拉刷新 模糊效果 AutoLayout 富文本 图表 表相关与Tabbar 隐藏与显示 HUD与To ...
- Android11键盘弹出动画,(2016-11-04完美解决)移动端iOS第三方输入法遮挡底部input及android键盘回落后留白问题...
问题概述 问题1:H5 web 移动端 输入框, 键盘唤起后fixed定位好的元素跟随页面滚动了起来- fixed属性失效了!满屏任性横飞, 如下图: 问题2:有几后来含些在到气时按式近篇来又的方浏消 ...
- fir.im Weekly - 热门 iOS 第三方库大盘点
本期 fir.im Weekly 收集的热度资源,大部分关于www.gyjqfkyy.comAndroid.iOS 开发工具.源码和脑洞大开的 UI 动画,希望给你带来更多的工作创意与灵感. 盘点国内 ...
- 结合正则 抓取的iOS 第三方
+++++抓取方法在后面+++++ 第三方 用途 EGOTableViewPullRefresh 最早的下拉刷新控件. SVPullToRefresh 下拉刷新控件. XHRefreshControl ...
- XamarinSQLite教程在Xamarin.iOS项目中定位数据库文件
XamarinSQLite教程在Xamarin.iOS项目中定位数据库文件 开发者可以在指定的路径中找到复制的数据库文件,具体的操作步骤如下: (1)单击Mac电脑中Finder菜单中的"前 ...
- ios 底部用定位 fixed。在软件盘出来后,页面元素被顶上去一部分,fixed定位的footer也跑到了上面去。解决方法...
ios 底部用定位 fixed.在软件盘出来后,页面元素被顶上去一部分,fixed定位的footer也跑到了上面去.解决方法 $("input").focus(function() ...
- 手把手教你使用CocoaPods管理你的iOS第三方开源类库
手把手教你使用CocoaPods管理你的iOS第三方开源类库 本文转载自:http://kittenyang.com/cocoapods 鉴于我开这个博客的初衷是记录自己平时的技术积累,而我平时又属研 ...
最新文章
- python拟牛顿法迭代点绘制_拟牛顿法python
- 进程,线程,消息循环的关系
- 单片机小白学步系列(三) 偶遇51单片机
- 【离散化】【DP】命运石之门的选择
- 前端学习(2790):封装商品组件并且使用
- php 删除字符串中链接_python面试——删除字符串中的“b”和“ac”,删除后无b和ac(CloudIn(云英)面经)...
- mybatis多条件批量查询_Mybatis【14】 Mybatis如何实现一对多查询?
- python切片长度_python的间隔切片技巧
- 用user-selection实现让页面上的内容不能被选中
- 不用StringBuilder!Java8的StringJoiner,也很香!
- Python被誉为神奇的“胶水语言”,到底神奇在哪?
- jmeter性能测试实战_Jmeter接口测试实战篇:10分钟学会Jmeter的用法
- 网络营销的方案及技巧
- 我的第一本书,被选作大学教材了!
- 影响你选择职业的,跟个人相关的主要的因素
- 为什么HTTPS比HTTP更安全?
- wkhtmltopdf(thead)分页问题
- xml中加html源码,XML与HTML的结合(下)_xml
- HDOJ 5155 Harry And Magic Box DP
- 人类始终无法抗拒的十种心理