Crashlytics-iOS 使用記錄

納蘭若水發表於2018-02-08

如何使用

Twitter的Crashlytics SDK介面做的非常簡潔,後臺也是非常友好,關於如何使用,在這裡貼下別的同學的連結,不再贅述啦!
iOS 崩潰統計工具-Crashlytics
瞭解crash收集:漫談iOS Crash收集框架

customKey 和 customLog

customKey 和 customLog非常有用,可以跟隨crash的report一起上傳到伺服器上,可以記錄從啟動到崩潰過程中的使用者行為路徑,方便使用者定位crash根源。

    //customKey
    [CrashlyticsKit setUserIdentifier:@"device"];
    [CrashlyticsKit setUserEmail:@"133@qq.com"];
    [CrashlyticsKit setUserName:@"xyl"];
    [CrashlyticsKit setObjectValue:@"testValue" forKey:@"testKey"];
    NSDictionary *dict = @{
                           @"key1":@"key1",
                           @"key2":@"key2"
                           };
    [CrashlyticsKit setObjectValue:dict forKey:@"testKeyDict"];
複製程式碼

平臺檢視效果

custom key

    //customLog
    CLS_LOG(@" testCrashButton3Tapped log1");
    CLS_LOG(@" UncaughtExceptionHandler test");
    //.... more
複製程式碼

custom log

和NSSetUncaughtExceptionHandler (&UncaughtExceptionHandler)不衝突

在監聽中使用customKey和customLog新增一些自己想放到崩潰資訊中的重要資訊,比如當前顯示的view之類的。

Unix訊號捕獲和crashlytics衝突問題

如上如果我想在Mach異常崩潰的時候新增一些log資訊,這個時候會有些問題了,如signal(SIGABRT, signalHandler)的捕獲,在crashlytics前設定會被crashlytics覆蓋導致signalHandler不被呼叫,在crashlytics後呼叫會導致crashlytics捕獲unix訊號的handler不被呼叫,這都不是我們想看到的,解決辦法是想辦法儲存crashlytics的signalHandler,在crashlytics初始化後呼叫。解決辦法請參考iOS Crash 捕獲及堆疊符號化思路剖析;

    //提供一個SIGABRT型別的異常
    typedef struct Test
    {
        int a;
        int b;
    }Test;
    Test *pTest = {1,2};
    free(pTest);//導致SIGABRT的錯誤,因為記憶體中根本就沒有這個空間,哪來的free,就在棧中的物件而已
    pTest->a = 5;
複製程式碼

crashlytics的崩潰資訊收集、上傳流程圖

Crashlytics-iOS 使用記錄

crashlytics流程圖詳情

相關文章