iOS Crash 分析(文一)- 開始 – iPhone手機開發技術文章 iPhone軟體開發教學課程

iOS Crash 分析(文一)- 開始


1. 名詞解釋

1. UUID

一個字符串,在iOS上每個可執行文件或庫文件都包含至少一個UUID。目的是為瞭唯一識別這個文件。

2. dwarfdump

蘋果提供的命令行工具,其中一些功能就是查看可執行文件件或庫文件的UUID

3. symbolicatecrash

一個蘋果提供的腳本。可以將crash日志符號化為可讀的堆棧信息。

4. atosl

蘋果提供的命令行工具,可以將crash的base_address和load_address轉化為可讀的堆棧信息。symbolicatecrash就是使用這個命令來做符號化的。

2.如何獲取Crash日志

1.模擬器崩潰

模擬器崩潰後可以在“~/Library/Logs/DiagnosticReports/”下找到crash日志。

2.真機崩潰

1.Xcode獲取日志

手機和mac連接後,打開Xcode選擇window進入Organizer(快捷方式是 Shift-CMD-2),在 Organizer 窗口上, 選中 Devices 標簽欄. 在左側的導航面板上,選中 Device Logs, 如下圖所示:

選擇對應設備的Device Logs菜單,就可以看到崩潰日志。
打開圖最上邊的Device Logs菜單就可以看到mac曾經同步過的iOS設備的崩潰日志。

2.手動獲取日志

日志存放的路徑 ~/Library/Logs/CrashReporter/MobileDevice/DEVICE_NAME

DEVICE_NAME是你想要查看的設備。
下面是我的終端輸出的信息:

?  DiagnosticReports  pwd
/Users/zhuolaiqiang/Library/Logs/DiagnosticReports
?  DiagnosticReports  ls
QQ_2014-05-30-132026_Anyhacker.crash            atosl_2014-06-04-151416_Anyhacker.crash         eclipse_2014-05-29-192522_Anyhacker.crash       eclipse_2014-06-02-145714_Anyhacker.crash
SogouInput_2014-05-29-151154_Anyhacker.crash    atosl_2014-06-04-151447_Anyhacker.crash         

3.符號化

1.利用Xcode符號化

app在真機設備上Crash後,我們可以讓iOS設備和mac連接,然後打開Xcode選擇window進入Organizer(快捷方式是 Shift-CMD-2),在 Organizer 窗口上, 選中對應設備的 Device Logs標簽,然後找到對應app日志文件,如圖所示:

這樣就可以看到已經符號化完畢的日志。

2.利用symbolicatecrash腳本符號化

symbolicatecrash是蘋果隨Xcode一起提供的專門用來做崩潰日志符號化的腳本工具(perl)。
symbolicatecrash存放路徑是
“/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/symbolicatecrash”。

使用方法是:
symbolicatecrash xx.crash xx.DSYM
xx.crash:需要符號化的崩潰日志文件
xx.DSYM:編譯APP時產生的DSYM文件,此文件可以不指定,symbolicatecrash會在硬盤內自動搜索和匹配該文件(前提是你的硬盤內存有這個文件)

發佈留言