iOS平台一套完善的Crash Report解決方案


最開始想iOS和Android都做了,后面嘗試了下android上面的崩潰收集,困難程度超出我的想象,也可以說幾乎不可能實現像iOS下面一樣實用且方便的崩潰收集系統(1.有堆棧等信息,不會產生卡死等副作用。  2.專指jni崩潰,java的崩潰很容易處理)。  這個有一點要反思一下,在困難的地方浪費時間不如把簡單的東西做好,那么多賺大錢的游戲也是各種不完美,但是玩家不會在意程序是否牛x,技術是否高明,只要玩家想玩的核心點做到極致就可以了。

 

        1、在崩潰的時候使用 (這里)提到的方式來獲取堆棧直接上傳到服務器。  這個可以進行粗略定位,並且是明文的,不需要額外工具轉換格式。   缺點是,不能定位到具體行。但是很多情況下這個也是足夠使用的。

        2、使用plcrashreporter 獲取到崩潰日志文件。   在游戲下一次開始運行的時候上傳這個崩潰文件到服務器。  我們獲取到這個文件后具體分析過程:

                 a、將發布版本時備份的dSYM符號文件和崩潰信息文件(xx.plcrash)  放到一個文件夾

                 b、需要用到的工具  plcrashutil (這個在plcrashreporter發布包的Tools文件夾下)     symbolicatecrash(這個在xcode程序文件夾下   /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks/DTDeviceKit.framework/Versions/A/Resources/)

                c、運行命令

   

  1. ./plcrashutil convert --format=iphone live_report.plcrash > test.crash 
  2. export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer 
  3. ./symbolicatecrash test.crash DemoCrash-iOS-Device.app.dSYM > crash_readable.log 
./plcrashutil convert --format=iphone live_report.plcrash > test.crash
export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer
./symbolicatecrash test.crash DemoCrash-iOS-Device.app.dSYM > crash_readable.log

第一個命令將plcrash轉換為蘋果標准崩潰格式,第二個命令可以根據dSYM符號文件解析出崩潰信息,可以定位到具體行,例如:

 

  1. Thread 0 Crashed: 
  2. 0   DemoCrash-iOS-Device                0x00002780 stackFrame (main.m:41) 
  3.  
  4. Thread 1: 
  5. 0   libsystem_kernel.dylib              0x368ad3a8 kevent + 24 
  6. 1   libdispatch.dylib                   0x376dabc9 _dispatch_mgr_wakeup + 1 


免責聲明!

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



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