macOS 应用的崩溃日志解析

一、获取崩溃日志对应的.dSYM文件

Xcode-->Window-->Organizer 找到对应的 .xcarchive 文件 -->Show in Finder 找到对应的.dsym

二、获取Xcode 下面的symbolicatecrash工具

复制下面的路径前往获取symbolicatecrash

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

三、创建新的文件夹将.dSYMsymbolicatecrash崩溃日志文件.txt 三个文件放入。这里文件夹命名crash

四、使用终端命令进入到刚刚创建的crash文件夹并执行命令行

 cd /Users/peanut/Desktop/crash 
 ./symbolicatecrash ./crashLog.txt ./M1 Controller.app.dSYM > MyAppCrash.log

symbolicatecrash:是符号化工具
crashLog.txt:是崩溃日志的文件名
My Controller.app.dSYM:是dSYM 的名称。(注意:我这里的文件名是有空格的。下文会提及并解释)
MyAppCrash.log:是符号化后导出的文件

五、执行终端命令后出现Error: "DEVELOPER_DIR" is not defined at ./symbolicatecrash line 69.

那是因为没有定义文件地址.继续执行

export DEVELOPER_DIR="/Applications/XCode.app/Contents/Developer"  

-命令后 再次执行

./symbolicatecrash ./crashLog.txt ./M1 Controller.app.dSYM > MyAppCrash.log

即可 出现MyAppCrash.log文件。

⚠️⚠️ 如果解析的是iOS App的崩溃日志到这里可能没啥问题。到此解决问题!
⚠️⚠️如果解析的是macOS 应用的崩溃日志,会收到如错误提示
Unsupported crash log version: 12 at ./symbolicatecrash line 616.

peanut@huashengkedeMacBook-Pro ~ % cd /Users/peanut/Desktop/crash 
peanut@huashengkedeMacBook-Pro crash % ./symbolicatecrash ./crashLog.txt ./My Controller.app.dSYM > MyAppCrash.log
Error: "DEVELOPER_DIR" is not defined at ./symbolicatecrash line 69.
peanut@huashengkedeMacBook-Pro crash % export DEVELOPER_DIR="/Applications/XCode.app/Contents/Developer"           
peanut@huashengkedeMacBook-Pro crash % ./symbolicatecrash ./crashLog.txt ./My Controller.app.dSYM > MyAppCrash.log
Unsupported crash log version: 12 at ./symbolicatecrash line 616.

翻阅资料发现xcode 还不支持导入 OSX 崩溃日志并将其符号化参考资料

所以为了解析macOS崩溃日志 ,我们需要使用到atos 命令

六、继以上步骤继续往下解析macOS崩溃日志

1.获取.dYSM的UUID
执行命令xcrun dwarfdump --uuid name.app.dSYM

peanut@huashengkedeMacBook-Pro crash % xcrun dwarfdump --uuid My controller.app.dSYM        
error: My: No such file or directory

可以看到我替换了name.app.dSYM的名称My Controller.app.dSYM后执行出错。是因为我的名称中带了空格。在这里我们可以将crash文件夹里面的My Controller.app.dSYM修改为MyController.app.dSYM这里修改名称并不会对符号化有任何影响请放心~
我们再次执行

peanut@huashengkedeMacBook-Pro crash % xcrun dwarfdump --uuid MyController.app.dSYM
UUID: 28409CBF-FF6E-3035-AA0D-2C622D947194 (x86_64) MyController.app.dSYM/Contents/Resources/DWARF/My Controller
UUID: 1F606971-BC0F-385E-872D-1A159905FF03 (arm64) MyController.app.dSYM/Contents/Resources/DWARF/My Controller

在这里获取到了俩个UUID,对于这里我也没有理解其含义。有知道的小伙伴可以解释下。
2.在崩溃日志中Binary Images二进制图像部分找到您的应用
使用第一步获取到的UUID分别在崩溃日志中查找。
我只找到arm64对应的UUID ,另一个x86_64没有找到

Binary Images:
       0x1191e8000 -        0x11931ffff com.apple.audio.units.Components (1.14) <fd93a3bc-5142-33ea-88bd-c2258c5a032d> /System/Library/Components/CoreAudio.component/Contents/MacOS/CoreAudio
       0x104f90000 -        0x104f9bfff com.apple.iokit.IOUSBLib (900.4.2) <351e046e-b6eb-3ee7-96b3-841918c05405> /System/Library/Extensions/IOUSBHostFamily.kext/Contents/PlugIns/IOUSBLib.bundle/Contents/MacOS/IOUSBLib
       0x1046c8000 -        0x1046d3fff libobjc-trampolines.dylib (*) <9381bd6d-84a5-3c72-b3b8-88428afa4782> /usr/lib/libobjc-trampolines.dylib
       0x1048d8000 -        0x1048e7fff org.cocoapods.SnapKit (5.0.1) <fa297fb0-0071-3417-bf2c-b0cdba7dade8> /Applications/My Controller.app/Contents/Frameworks/SnapKit.framework/Versions/A/SnapKit
       0x1042f0000 -        0x104397fff com.cn.******.my (1.0) <1f606971-bc0f-385e-872d-1a159905ff03> /Applications/My Controller.app/Contents/MacOS/My Controller
       0x1894a0000 -        0x189978fff com.apple.CoreFoundation (6.9) <84b539d5-22c9-3f8c-84c8-903e9c7b8d29> /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation
       0x18a5f5000 -        0x18b252fff com.apple.Foundation (6.9) <99e0292d-7873-3968-9c9c-5955638689a5> /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation
       0x18cd42000 -        0x18e07efff com.apple.AppKit (6.9) <61f710be-9132-3cc2-883d-066365fba1ad> /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit
       0x190531000 -        0x1905a4ff7 com.apple.AE (944) <3b96540c-5db5-3880-bc50-a759b87f6638> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/AE.framework/Versions/A/AE
       0x193c8d000 -        0x193f50fff com.apple.HIToolbox (2.1.1) <7db6c397-563f-3756-908c-e25b019a1848> /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/HIToolbox
       0x1890b0000 -        0x189138a17 dyld (*) <37bbc384-0755-31c7-a808-0ed49e44dd8e> /usr/lib/dyld
               0x0 - 0xffffffffffffffff ??? (*) <00000000-0000-0000-0000-000000000000> ???
       0x199108000 -        0x199665fff libswiftCore.dylib (*) <c2fd0f69-d72c-37a5-938e-1bd710c88431> /usr/lib/swift/libswiftCore.dylib
       0x189438000 -        0x189444fff libsystem_pthread.dylib (*) <386b0fc1-7873-3328-8e71-43269fd1b2c7> /usr/lib/system/libsystem_pthread.dylib
       0x1893fd000 -        0x189437ffb libsystem_kernel.dylib (*) <9b8b53f9-e2b6-36df-98e9-28d8fca732f2> /usr/lib/system/libsystem_kernel.dylib
       0x1939b5000 -        0x1939defff com.apple.audio.caulk (1.0) <f2da6e2e-b5a0-3ce7-97f5-7d2141a3ec32> /System/Library/PrivateFrameworks/caulk.framework/Versions/A/caulk
       0x18bac2000 -        0x18c1c8fff com.apple.audio.CoreAudio (5.0) <e818958c-f2dc-37df-9896-ad6e9bcd028a> /System/Library/Frameworks/CoreAudio.framework/Versions/A/CoreAudio

查找到的我的应用信息如下

0x1042f0000 -        0x104397fff com.cn.******.my (1.0) <1f606971-bc0f-385e-872d-1a159905ff03> /Applications/My Controller.app/Contents/MacOS/My Controller

尖括号中的部分是 UUID... 验证它是否与 dwarfdump 的输出匹配。如果不匹配,则说明您查看的是错误的版本。版本号在括号中 - 这可能有助于您找到正确的版本。
注:如果你确定崩溃日志与.dSYM版本是一致的话 。可以忽略1步骤。直接在Binary Images中查找到自己应用的bundle id 即可

3.在Binary Images部分找到您的应用加载地址。在上面的例子中,加载地址是0x1042f0000。

4.在崩溃日志中找到应用程序崩溃的位置


Crashed Thread:        0  Dispatch queue: com.apple.main-thread

Exception Type:        EXC_BREAKPOINT (SIGTRAP)
Exception Codes:       0x0000000000000001, 0x0000000104300724

Termination Reason:    Namespace SIGNAL, Code 5 Trace/BPT trap: 5
Terminating Process:   exc handler [5840]

Thread 0 Crashed::  Dispatch queue: com.apple.main-thread
0   My Controller                          0x104300724 0x1042f0000 + 67364
1   My Controller                          0x1042fc9d4 0x1042f0000 + 51668
2   My Controller                          0x1042fc724 0x1042f0000 + 50980
3   My Controller                          0x1042fc774 0x1042f0000 + 51060
4   My Controller                          0x104344a74 0x1042f0000 + 346740
5   My Controller                          0x1043468fc 0x1042f0000 + 354556
6   My Controller                          0x104345d5c 0x1042f0000 + 351580
7   My Controller                          0x104346120 0x1042f0000 + 352544
8   CoreFoundation                         0x189513144 __CFNOTIFICATIONCENTER_IS_CALLING_OUT_TO_AN_OBSERVER__ + 148
9   CoreFoundation                         0x1895a73d8 ___CFXRegistrationPost_block_invoke + 88
10  CoreFoundation                         0x1895a7320 _CFXRegistrationPost + 440

可以看到0x104300724 可能就是程序崩溃的地址
5.运行 atos 以获取有关该地址的信息
1步骤中我们获取到二个UUID分别对应arm64、x86_64。这这里我们是用 arm64的那个UUID获取到应用信息的。故命令行中使用arm64 ,反之则使用x86_64

atos -o MyController.app.dSYM -arch arm64 -l 0x1042f0000 0x104300724 

可以看到符号化后的输出

specialized MainContainView.recoverLastBuildUI() (in My Controller) (MainContainView.swift:101)

输出表明是在MainContainView中的recoverLastBuildUI()方法出现了崩溃 具体在101行。到此解析结束

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容