一溪烤、簡(jiǎn)介
- 符號(hào)表是什么杭攻?
符號(hào)表
就是指在Xcode項(xiàng)目編譯后家夺,在編譯生成的二進(jìn)制文件.app的同級(jí)目錄下生成的同名的.dSYM文件。
.dSYM文件其實(shí)是一個(gè)目錄该园,在子目錄中包含了一個(gè)16進(jìn)制的保存函數(shù)地址映射信息的中轉(zhuǎn)文件酸舍,所有Debug的symbols都在這個(gè)文件中(包括文件名、函數(shù)名里初、行號(hào)等)父腕,所以也稱之為調(diào)試符號(hào)信息文件
。
一般地青瀑,Xcode項(xiàng)目每次編譯后璧亮,都會(huì)生成一個(gè)新的.dSYM文件。因此斥难,App的每一個(gè)發(fā)布版本枝嘶,都需要備份一個(gè)對(duì)應(yīng)的.dSYM文件,以便后續(xù)調(diào)試定位問(wèn)題哑诊。
二群扶、crash日志符號(hào)化
1、準(zhǔn)備:
- symbolicatecrash腳本工具
執(zhí)行如下命令
find /Applications/Xcode.app -name symbolicatecrash -type f
得到symbolicatecrash腳本工具路徑镀裤,然后按著該路徑找到該工具
/Applications/Xcode.app/Contents/Developer/Platforms/AppleTVSimulator.platform/Developer/Library/PrivateFrameworks/DVTFoundation.framework/symbolicatecrash
- xxx.crash(crash日志)
1竞阐、如果設(shè)備就在身邊
連接設(shè)備,打開Xcode - Window -Devices and Simulaters -View Devices Log Organizer暑劝,然后根據(jù)時(shí)間排序查看crash日志骆莹。
2、如果應(yīng)用程序已經(jīng)提交App Store發(fā)布担猛,用戶已經(jīng)安裝使用
之前開發(fā)者可以在iTunes Connect查看崩潰日志幕垦,后來(lái)蘋果改成如下方式:在Xcode上登錄你的賬號(hào),打開Xcode - Window - organizer - Crashes
(PS:不過(guò)大多數(shù)發(fā)者并不依賴于此傅联。因?yàn)檫@需要用戶設(shè)備上同意上傳相關(guān)信息先改。考慮并不是所有iPhone用戶都允許發(fā)送診斷報(bào)告(crash日志)蒸走,而且對(duì)于部分提交Apple的crash日志仇奶,開發(fā)者需要手動(dòng)拉取,然后找到對(duì)應(yīng)符號(hào)文件進(jìn)行解析——這是一件繁瑣的事情比驻。所以實(shí)際項(xiàng)目中该溯,通常接入現(xiàn)有的crash收集工具,或者自己編寫一個(gè)進(jìn)行自動(dòng)化收集嫁艇、解析和統(tǒng)計(jì)匯總朗伶。所以實(shí)際項(xiàng)目中,通常接入現(xiàn)有的crash收集工具步咪,或者自己編寫一個(gè)進(jìn)行自動(dòng)化收集、解析和統(tǒng)計(jì)匯總益楼。)
- xxx.app.dSYM
在Xcode - Window - Organizer - Archives中猾漫,找到對(duì)應(yīng)的版本
右擊Show in Finder,找到xxx.xcarchive
右擊顯示包內(nèi)容点晴,找到dSYMs文件夾
- xxx.app
項(xiàng)目中Products目錄
2、操作:
放在同一目錄下悯周,執(zhí)行命令
./symbolicatecrash xxx.crash xxx.app.dSYM > Control_symbol.crash
export DEVELOPER_DIR="/Applications/XCode.app/Contents/Developer"
三粒督、分析符號(hào)化后的crash日志
1、設(shè)備和crash信息
Incident Identifier: F3573A...E2F244A //crash的id
CrashReporter Key: cc2298...es77eeb //crash的設(shè)備id
Hardware Model: iPhone7,2 //手機(jī)型號(hào)
Process: [AppName] [1816] //APP的名字[進(jìn)程的id]
Path: /private/.../Application... //APP的位置
Identifier: com.... //bundle ID
Version: 14 (2.3.5) //版本號(hào)
Code Type: ARM-64 (Native) //app的應(yīng)用架構(gòu)之類不大清楚禽翼,^_^
Parent Process: launchd [1]
Date/Time: 2015-10-26 15:03:29.29 +0800 //crash發(fā)生時(shí)間
Launch Time: 2015-10-26 14:58:28.28 +0800 //進(jìn)入應(yīng)用時(shí)間
OS Version: iOS 9.1 (13B143) //iOS版本
Report Version: 105
2屠橄、異常信息
Exception Type: EXC_BAD_ACCESS (SIGABRT) //異常的類型
Exception Subtype: KERN_INVALID_ADDRESS at 0x0000000000000118 //異常子類型
Triggered by Thread: 0 //異常發(fā)生的線程(0為主線程,其他為子線程)
3闰挡、線程信息
Last Exception Backtrace:
0 CoreFoundation 0x182780f48 __exceptionPreprocess + 124
1 libobjc.A.dylib 0x197333f80 objc_exception_throw + 56
2 CoreFoundation 0x182780e90 +[NSException raise:format:] + 120
3 [AppName] 0x100c42a40 UmengSignalHandler + 144
4 libsystem_platform.dylib 0x197d6193c _sigtramp + 52
5 [AppName] 0x1005d9f38 CScopePtr<IAVGAudioLogic>::operator IAVGAudioLogic*<IAVGAudioLogic>() (xprefc.h:165)
6 [AppName] 0x1005d3b8c tencent::av::AVRoomMultiImpl::GetAudioLogic() (av_room_multi_impl.h:119)
7 [AppName] 0x10057076c tencent::av::AVAudioCtrlImpl::SetAudioOutputMode(int) (av_audio_ctrl_impl.cpp:443)
8 [AppName] 0x10044dc3c -[AVBasicManager changeSpeakerMode:] (AVManager.mm:525)
9 [AppName] 0x100296e1c -[KTQAVRoom enableSpeakerMode:] (KTQAVRoom.m:345)
10 [AppName] 0x1002970d0 -[KTQAVRoom settingSpeaker:] (KTQAVRoom.m:362)
11 [AppName] 0x1003d5464 -[KTChatView onAudioNotificationReceived:] (KTChatView.m:685)