iOS崩溃报告符号化后仍无法识别,请求技术支援
我完全理解你现在的困扰——费尽周折拿到崩溃报告,用Xcode自动符号化后却全是fb1UCM8vZCiE这类乱码,根本没法定位问题。咱们一步步来排查和解决:
一、先确认核心匹配性:dSYM与崩溃报告必须UUID一致
这是符号化成功的前提,Xcode找不到对应符号大概率是因为dSYM和崩溃报告的UUID不匹配。
检查dSYM的UUID
打开终端,执行以下命令(替换成你的dSYM路径):
dwarfdump --uuid /path/to/your/Recycling.app.dSYM
你会得到类似这样的输出:
UUID: 20CDEB29-1F14-3298-9649-503635DED968 (arm64) /path/to/your/Recycling.app.dSYM
对比崩溃报告里的UUID
看你提供的崩溃报告开头:
{"app_name":"Recycling","timestamp":"2020-02-08 00:00:51.02 +0800","app_version":"1.7.3","slice_uuid":"20cdeb29-1f14-3298-9649-503635ded968",...}
这里的slice_uuid必须和dwarfdump输出的UUID完全一致(大小写不敏感)。如果不一致,说明你下载的dSYM不是对应这个崩溃版本的,需要重新从App Store Connect下载对应build(1.7.3,build 3)的dSYM。
二、修正Xcode符号化的路径配置
Xcode自动符号化需要dSYM在它能扫描到的位置:
- 方法1:关联到归档
打开Xcode的Organizer(Window -> Organizer),找到你App的1.7.3版本归档,右键选择"Show in Finder",把下载的dSYM拖到归档的dSYMs文件夹里,然后重新导入崩溃报告到Device Logs。 - 方法2:放到设备支持文件夹
把dSYM复制到~/Library/Developer/Xcode/iOS DeviceSupport/13.3.1 (17D50)/Symbols目录下(如果没有Symbols文件夹就新建一个),然后重启Xcode,重新连接设备后再导入崩溃报告。
三、手动符号化(最可靠的方式)
如果自动符号化还是不行,用atos命令手动解析:
步骤1:获取App的加载基地址
你需要崩溃报告里的Binary Images部分(你提供的日志里没贴,建议重新导出完整的崩溃报告),里面会有类似这样的行:
Binary Images: ... Recycling 0x101000000 - 0x10105ffff <20CDEB29-1F14-3298-9649-503635DED968> /private/var/containers/Bundle/Application/.../Recycling.app/Recycling
这里的0x101000000就是App的加载基地址。
步骤2:执行atos命令
在终端输入:
atos -arch arm64 -o /path/to/Recycling.app.dSYM/Contents/Resources/DWARF/Recycling -l 0x101000000 0x10103b464 0x1010431d4 0x101038a78
替换0x101000000为你拿到的基地址,后面的几个地址是崩溃日志里的乱码行地址。执行后就能得到对应的方法名和代码行号。
四、清理Xcode符号缓存
有时候Xcode的缓存会导致符号识别异常,清理后重试:
- 关闭Xcode;
- 删除
~/Library/Developer/Xcode/iOS DeviceSupport/13.3.1 (17D50)文件夹; - 重新连接iOS设备,Xcode会自动重新生成该文件夹;
- 再次导入崩溃报告进行符号化。
附你提供的崩溃报告详情:
{"app_name":"Recycling","timestamp":"2020-02-08 00:00:51.02 +0800","app_version":"1.7.3","slice_uuid":"20cdeb29-1f14-3298-9649-503635ded968","adam_id":1406292831,"build_version":"3","bundleID":"com.qdjzd.Recycling","share_with_app_devs":true,"is_first_party":false,"bug_type":"109","os_version":"iPhone OS 13.3.1 (17D50)","incident_id":"36AEED5C-F4AD-4711-926E-783D4783039E","name":"Recycling"}
Incident Identifier: 36AEED5C-F4AD-4711-926E-783D4783039E
CrashReporter Key: 665569f89a7cca0567f04077cd6e5757ddeffea5
Hardware Model: xxx1
Process: Recycling [6029]
Path: /private/var/containers/Bundle/Application/0A62AE5B-BE91-4A30-8CB5-A6137DE9DCC1/Recycling.app/Recycling
Identifier: com.qdjzd.Recycling
Version: 3 (1.7.3)
AppStoreTools: 11C29
Code Type: ARM-64 (Native)
Role: Foreground
Parent Process: launchd [1]
Coalition: com.qdjzd.Recycling [1787]
Date/Time: 2020-02-08 00:00:50.8368 +0800
Launch Time: 2020-02-08 00:00:22.0052 +0800
OS Version: iPhone OS 13.3.1 (17D50)
Release Type: User
Baseband Version: n/a
Report Version: 104
Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note: EXC_CORPSE_NOTIFY
Triggered by Thread: 11
Last Exception Backtrace:
0 CoreFoundation 0x1abab8a48 0x1ab98d000 + 1227336
1 libobjc.A.dylib 0x1ab7dffa4 0x1ab7da000 + 24484
2 CoreFoundation 0x1ab9c0e34 0x1ab98d000 + 212532
3 CoreServices 0x1ac1232d8 0x1ac056000 + 840408
4 Foundation 0x1abd736f8 0x1abd69000 + 42744
5 Recycling 0x10103b464 fb1UCM8vZCiE + 355
6 Recycling 0x1010431d4 fbkUVUzGnhkS + 1655
7 Recycling 0x101038a78 fbIiaWxkoUb6 + 307
8 libsystem_pthread.dylib 0x1ab7d3d8c 0x1ab7c9000 + 44428
9 libsystem_pthread.dylib 0x1ab7d776c 0x1ab7c9000 + 59244
内容的提问来源于stack exchange,提问作者Van Zhu

