別用symbolicatecrash來解析crash Log了


今天突然發現了一個解析iOS crash log的好方法,忍不住來分享一下。

相信每個做iOS開發的TX都應該不會對symbolicatecrash陌生,我們第一次遇到真機上產生的崩潰日志時,在網上搜到的大部分教程都告訴我們說要用symbolicatecrash來解析crash log,我信了,所以相當長一段時間內,我都是用這個工具來解析crash log的。

每次都去敲命令來解析crash log本身就是一件很蛋疼的事情,但這還不是麻煩的,最麻煩的是用symbolicatecrash還經常遇到問題:怎么crash log又解析失敗了?怎么批量解析crash log?

問題出在方法上,實際上我們完全用不着symbolicatecrash的,因為Xcode中自帶的organizer就是很好的解析crash log工具了。

舉個例子,如果我們的應用是在自己的機器上編譯生成的,把應用裝在真機上如果有崩潰產生,把真機通過數據線連接到Mac電腦上,打開Xcode菜單上的Window——Organizer,找到設備的device logs項中的crash log,稍等片刻,你就會發現這里的crash log已經被自動解析過了(大部分情況會自動解析,如果不行請右鍵點擊選擇Re-Sysbomlicate)。

但是如果應用不是在自己的編譯上生成的,你會發現organizer不會自動解析crash log(除了系統函數)。怎么在這種情況下也讓organizer也能自動解析crash log呢?

其實之前的organizer之所以能自動解析你設備上的crash log,是因為它能根據spotlight的索引來找到對應的.app和dSYM文件,對於這一點,我的猜測是在自己的Mac電腦上編譯生成應用時,系統自動對其進行了索引。這個索引應該是根據app uuid來索引的。這個uuid可以執行下面的命令得到:

dwarfdump —uuid YourApp.app/YourApp 
dwarfdump —uuid YourApp.app.dSYM

如果要能解析出crash log,crash log中攜帶的uuid與dSYM文件的uuid必須與app uuid一致。

既然spotlight能自動進行索引,那是不是也可以手動進行索引呢?答案是能,這正是自動解析的關鍵。手動索引的命令是mdimport。比如,把iOS應用的.app和.dSYM文件放到一個文件夾中,執行命令mdimport foldername就可以。命令執行完成后再用剛才的organizer去查看crash log,你會發現也能自動解析了。

這意味着什么呢?意味着你把應用所有版本的.app和.dSYM文件放入一個專門的文件夾中,只要mdimpor這個文件夾,以后的organizer就能自動解析出你所有的crash log。

好處不僅僅是這一點。organizer還有一個import功能,借助這個功能,我們可以把其它Mac電腦上的crash log導入到自己電腦中的organizer,然后就可以自動解析。更好的是,用這個功能可以批量導入收集到的crash log,然后我們就可以批量解析所有的crash log。

比起用symbolicatecrash,這種方法簡便了許多,從現在起,你可以拋棄symbolicatecrash了。但其實這還不是最好的方法,目前先進的方法是用crash report管理系統來管理所有的crash,比如使用QuincyKit, Crashlytics, Flurry等來進行管理,有時間自己也研究研究。

 Aug 14th, 2013

原創文章,版權聲明:自由轉載-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0


免責聲明!

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



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