- 线上App的Crash日记经由Crash日记收集办事获得(重要来源)。
- 也可以大年夜真机上获取Crash日记文件。点击Window -> Devices,选择你本身的机械,然后点击View Device Logs,右键可以导出Crash文件。
- 获取的┞封些日记文件都须要符号化处理。
4)将symbolicatecrash、.dSYM、.app、crash.crash拷贝到桌面下同一个文件夹下
5)检查 xx.app 和 xx.app.dSYM 文件以及crash 文件这三种的 UUID是否一致。
查看 xx.app 文件的 UUID,terminal 中输入敕令 :
1、数组操作
- 场景1:取数据索引越界。一般产生在UITableView的应用中,因为cellForRowAtIndexPath代劳办法是异步履行的,UITableView对象的dataSource一旦在加载数据过程中产生变更,极有可能产生数组越界的异常。在多线程场景下,列表界面的数据有可能经常变更,很可能产生;当列表界面数据不怎么变更的时刻,几乎感知不到这种异常的存在。解决办法:大年夜数组中取数据前,校验索引是否精确。
- dwarfdump --uuid xx.app/xx (xx代表你的项目名)
查看 xx.app.dSYM 文件的 UUID ,在 terminal 中输入敕令:
- dwarfdump --uuid xx.app.dSYM
查看crash 日记中的Incident Identifier (crash 文件的 UUID)
6)应用敕令,生成“可定位问题的crash文件”
- //symbolreportXXX.crash就是符号化后的文件
- ./symbolicatecrash crashXXX.crash appName.app.dSYM > symbolreportXXX.crash
7) 根据符号化后的线程回溯信息,可以赞助定位出问题的代码行。
解释:如不雅履行symbolicatecrash敕令出现 Error: “DEVELOPER_DIR” is not defined at ./symbolicatecrash…如许的缺点,可以在履行敕令前,输入export DEVELOPER_DIR=”/Applications/XCode.app/Contents/Developer”
3、atos敕令
1)将.dSYM、.app、crash.crash放到同一个文件夹下。
2) 知道crash文件的UUID:履行grep “AppName arm” *crash,获得结不雅
- crash1.crash:0x100040000 - 0x100e23fff +AppName arm64 /var/containers/Bundle/Application/55A4D641-847F-4D24-86E1-129B28461858/AppName.app/AppName
- crash2.crash:0x100060000 - 0x100e43fff +AppName arm64 /var/containers/Bundle/Application/3229ED68-8D19-406D-A3F5-EC0310C9DB7C/QAppName.app/AppName
- crash3.crash: 0x5000 - 0xce8fff +AppName armv7 /var/containers/Bundle/Application/C6BE271D-2EAC-42C0-8E72-4523F88C76B2/AppName.app/AppName
个中0x100040000、0x100060000、0x5000是加载地址(loadingAddress), 而arm64、armv7 是 architecture 的值(architectureValue),这两个值后面都要用。
3)然后履行atos敕令,输入成功,进入待输入状况
- xcrun atos -o appName.app.dSYM/Contents/Resources/DWARF/appName -l loadingAddress -arch architectureValue
4) 此时输入App对应的Crash地址,获得产生crash的信息。
解释1:线程回溯部分并不是我们习惯应用办法名和行数,而是十六进制地址。所以我们在分析Crash前须要将这些十六进制地址转化成办法名称和行数,悛改程被称为符号化。
实例1:
- grep "AppName arm" *crash
- xcrun atos -o AppName.app.dSYM/Contents/Resources/DWARF/AppName -l 0x100040000 -arch arm64
实例2:
五、常见的Crash
三、异常信息解读
有一些Crash比较常见,下面列举出5种常见的Crash。
- @implementation NSMutableArray (Safe)
- - (id)safeObjectAtIndex:(NSUInteger)index{
- if (index < self.count){
- return
推荐阅读
cp 13 /home/m/Downloads/Compressed 因为我们已经知道文件名包含 .zip 扩大名,是以我们可以应用 .zip 扩大名进行搜刮。它将限制输出结不雅并显示所需的过程。很多情况下,删除的文件都可以恢复,比>>>详细阅读
本文标题:浅谈iOS Crash(一)
地址:http://www.17bianji.com/lsqh/36347.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示