iOS項目工程崩潰日志分析和采集,成為一名合格iOS程序員必須掌握的技能

一、日常開發(fā)崩潰分析

先看一個下Demo代碼:

    NSString *str = nil;
    NSArray *arr = @[@"hello",str];

代碼很簡單,因為數(shù)組里面有nil元素,所以運行的時候一定會崩潰,運行的崩潰畫面分析:

先看一個OC的DDemo工程:

    NSString *str = nil;
    NSArray *arr = @[@"hello",str];

代碼很簡單,因為數(shù)組里面有nil元素,所以運行的時候一定會崩潰,運行的崩潰畫面分析:
屏幕快照 2016-11-02 下午9.52.17.png

如圖所示,在我們工作中,在打了全局?jǐn)帱c的情況下,在一些情況下,還是不能崩潰在指定的問題代碼位置,而在main函數(shù)的入口處,我們有時候就會很茫然,不知所謂,這時候,我們就要一步一步來分析,問題道理在哪里,首先肯定會先看崩潰原因:
attempt to insert nil object from objects[1]
我們就知道,奧。。。原來是數(shù)組里面插入了一盒nil 的元素,導(dǎo)致崩潰的,這時候,就會去想,是哪里呢,哪里插入nil對象了呢???
這很明顯,不是一個正確的解決問題的思路,在看完原因后,我們應(yīng)該,看一下線程下調(diào)用堆棧的信息,堆棧信息我們應(yīng)該從下往上看(看圖中的箭頭方向),一行一行的看,可以看到我們熟悉的方法,我們最終可以得到以下信息:
在控制器viewController加載ViewDidLoad方法的中,初始化一個數(shù)組,由于嘗試插入一個nil元素,引起了崩潰。所以是不是很直觀的就知道了問題的具體信息了

二、上線應(yīng)用崩潰采集

那么,問題來了,在我們開發(fā)的環(huán)境中,我們可以通過看調(diào)用堆棧的信息,和崩潰信息來確定問題所在,那么當(dāng)我們的App上線后,不可計的用戶可以能由于各種環(huán)境和操作,發(fā)生崩潰,我們怎么知道問題在哪里,怎么優(yōu)化呢,
這時候,我想說,我剛學(xué)編程的時候,老師常說的一句話:凡是剛需的、經(jīng)常用的,但是又比較復(fù)雜的,都有大牛們做好的解決方案,不需要我們這種菜菜來考慮怎么解決 ,事實證明這句話是有道理的,現(xiàn)在有許多第三方提供了現(xiàn)成的解決方法,例如友盟、Bugly等,使用起來都很簡單方便,我就介紹下Bugly的使用方法:

  • 登錄Bugly,注冊應(yīng)用:
屏幕快照 2016-11-02 下午10.36.03.png
  • 選擇異常上報


    屏幕快照 2016-11-02 下午10.36.55.png
  • 可以選著SDK集成,也可以使用Pod,我當(dāng)然選著Pod了,這么方便:
    通過CocoaPods集成,在工程的Podfile
    里面添加以下代碼:
    pod 'Bugly'
    初始化Bugly,在工程AppDelegate.m
    的application:didFinishLaunchingWithOptions:
    方法中初始化Bugly:
    Objective-C

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [Bugly startWithAppId:@"此處替換為你的AppId"];
     return YES;
  }

Swift

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
      Bugly.startWithAppId("此處替換為你的AppId")
      return true
}

友情提醒:使用Bugly采集崩潰信息,要使用真機,不能使用模擬器,不可以Xcode啟動真機App,因為,崩潰后,程序會停止在mian函數(shù),那么上傳崩潰信息就走運行不了了。

看看,Bugly的崩潰信息:

屏幕快照 2016-11-02 下午10.56.42.png
屏幕快照 2016-11-02 下午10.56.55.png
屏幕快照 2016-11-02 下午10.57.11.png

可以看到,Bugly可以幫助我們做一些崩潰數(shù)據(jù)的統(tǒng)計與分析。


屏幕快照 2016-11-02 下午10.57.28.png

當(dāng)我們進(jìn)入崩潰的詳情頁面,可以清楚的看到在哪一個控制器,哪一個方法,什么原因引起的崩潰。

在日常工作中,看崩潰日志,使我們程序員每天必需要做工作,怎樣是不是很方便啊,友盟的使用和這個很類似,打擊有興趣可以自己嘗試哦。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,872評論 25 709
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,595評論 30 472
  • 在開發(fā)APP的過程中,崩潰等異常總是讓我們不堪其煩,不過開發(fā)階段的崩潰等問題,都是小事,可以進(jìn)行處理,但是一旦發(fā)布...
    IUVO閱讀 14,772評論 3 27
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,533評論 19 139
  • 我跟每個普通人一樣都有弱點,有冷酷、有自私、有虛榮心,道德只不過讓我看清這些弱點,然后去抑制它,或者從身邊的人身上...
    子小要加油閱讀 829評論 0 5

友情鏈接更多精彩內(nèi)容