查看iOS應用crash日志


基本操作:

1、電腦安裝好Xcode,連接好手機設備

2、打開Xcode,點擊Window-Devices and Simulators

3、選中手機設備,點擊View Device Logs,即可查看手機crash日志

 

這里有個問題,我們打印出來的crash日志里面,有代碼的函數名,但有些卻只有函數地址。

原因就在於我安裝到手機上的app並不是由我當前這台電腦編譯打包出來的,沒有**.app.dSYM這個文件,所以根本沒有辦法把地址同步解析出來。

處理方法:

1、在桌面創建一個Crash文件夾,然后去編譯打包的機器上打開Xcode-Window-Organizer,在Archives找到App,右鍵Show in Finder

2、復制**.ipa和**.app.dSYM到Crash文件夾

3、把symbolicatecrash文件(找到文件的方法見最下面)以及待解析的**.crash文件也一並復制到Crash目錄下

4、檢測dYSM文件和crash文件是否對應

從終端進入到剛剛創建的Crash文件中,輸入dwarfdump --uuid **.app.dSYM。如果輸出的uuid和crash文件中的一致,則可以解析出正確的crash文件。crash文件中的uuid位於Binary Images中的第一行尖括號內。

 

 

5、執行命令:./symbolicatecrash **.crash **.app.dSYM > crashLog.crash

如果解析成功了,就會有函數名了,像下面這樣

 

 注意,一般情況下,第一次使用symbolicatecrash會產生一個error,如下的錯誤信息

Error: "DEVELOPER_DIR" is not defined at ./symbolicatecrash line 69.

 解決辦法是輸入 export DEVELOPER_DIR="/Applications/XCode.app/Contents/Developer"

再執行 ./symbolicatecrash **.crash **.app.dSYM > crashLog.crash 就能解析了。

 

 

怎樣正確找到需要的symbolicatecrash文件呢?

首先要知道一點,之所以在View Device Logs面板可以看到crash日志,主要的功臣就是一個叫symbolicatecrash的可執行文件。集成在Xcode中的symbolicatecrash有點類似於集成在Android Studio中的adb工具包一樣,並且兩者都是可以單獨拿出來使用的。

首先,找到symbolicatecrash文件的位置:find /Applications/Xcode.app -name symbolicatecrash -type f

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/iOSSupport/Library/PrivateFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash

/Applications/Xcode.app/Contents/Developer/Platforms/WatchSimulator.platform/Developer/Library/PrivateFrameworks/DVTFoundation.framework/symbolicatecrash

/Applications/Xcode.app/Contents/Developer/Platforms/AppleTVSimulator.platform/Developer/Library/PrivateFrameworks/DVTFoundation.framework/symbolicatecrash

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Library/PrivateFrameworks/DVTFoundation.framework/symbolicatecrash

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

Xcode6.0之前:

"Contents->Developer->Platforms->iPhoneOS.platform->Developer->Library->PrivateFrameworks->DTDeviceKit.framework->Versions->A->Resources"

或者

"Contents->Developer->Platforms->iPhoneOS.platform->Developer->Library->PrivateFrameworks->DTDeviceKitBase.framework->Versions->A->Resources"

Xcode6.0之后,改成 "Contents/SharedFrameworks"

只要找到"symbolicatecrash" 文件, 復制然后粘貼到一個 "Crash" 文件夾里面。

這里我用的是Xcode11,所以使用的是最后一個,把它拷貝到Crash文件夾就ok了。

 

假如查看crash log中的崩潰線程是這樣的:

Thread 0 Crashed:
0   libobjc.A.dylib               0x00003ec0 objc_msgSend + 24
1   MyApp               0x000036d2 0×1000 + 9938

我們得到了用戶發生崩潰情況的內存地址:0x000036d2

然后回到我們應用程序的build目錄,目錄下一定要包含**.app和**.app.dSYM兩個文件。在控制台使用dwarfdump命令,就能解析出內存地址,如:

dwarfdump –lookup 0x000036d2 –arch armv6 MyApp.app.dSYM

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM