如何使用
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"];
複製程式碼
平臺檢視效果
//customLog
CLS_LOG(@" testCrashButton3Tapped log1");
CLS_LOG(@" UncaughtExceptionHandler test");
//.... more
複製程式碼
和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;
複製程式碼