iOS應(yīng)用崩潰日志導出與分析

本文把重點自己介紹的放在了前面祭陷,后面兩部分是擴充,大牛寫的比我的好,后面兩部分大家可以參考他們完整的文章盐欺。

3. 代碼bug 重點解析

1.首先必須有,crash日志和.DSYM文件:步驟

1.找到之前上傳到AppStore的.xcarchive文件仅醇,XCode->Window->Orgainize冗美,右鍵在Finder中顯示
2.右鍵顯示包內(nèi)容進入dSYMs文件夾,找到.dSYM文件
3.然后通過Terminal工具跳轉(zhuǎn)到.dSYM文件

$ cd ~/Library/Developer/Xcode/Archives/yyyy-mm-dd/appname.xcarchive/dSYMs/appname.app.dSYM
4.通過ls與cd指令進入DWARF路徑
kermitdeMacBook-Air:appname.app.dSYM kermit$ ls
Contents
kermitdeMacBook-Air:appname.app.dSYM kermit$ cd contents
kermitdeMacBook-Air:contents kermit$ ls
Info.plist Resources
kermitdeMacBook-Air:contents kermit$ cd resources
kermitdeMacBook-Air:resources kermit$ ls
DWARF
kermitdeMacBook-Air:resources kermit$ cd dwarf
kermitdeMacBook-Air:dwarf kermit$ ls
appname
5.根據(jù)處內(nèi)存地址反編譯找到源碼行

$ atos -arch arm64 -o appname 0x********

如果以上沒有找到具體的行的話:那么如圖:轉(zhuǎn)成16進制【偏移地址】

分析.png

接著如圖輸入析二,即可找到對應(yīng)的行了粉洼。

基地址和偏移地址.png

也可以轉(zhuǎn)成16進制后進入crash文件中找到對應(yīng)的基地址,按第五步執(zhí)行也能找到叶摄。

1.獲取崩潰日志的幾種方法:

  • 1属韧、當用戶抱怨閃退時,你可以要求他讓設(shè)備與iTunes同步蛤吓,設(shè)備與電腦上的iTunes Store同步后宵喂,會將崩潰日志保存在電腦上(路徑:Mac OS X:~/Library/Logs/CrashReporter/MobileDevice/)到上述位置把崩潰日志下載下來,然后通過電子郵件發(fā)送給你会傲;

    用這個方法獲取崩潰日志時锅棕,你必需盡量獲取用戶設(shè)備生成的所有崩潰日志。因為崩潰日志越多淌山,就越容易診斷問題所在裸燎。

  • 2、如果你裝了Xcode泼疑,也能很容易通過Xcode從你的設(shè)備上獲得崩潰日志德绿;將iOS設(shè)備連接到電腦上,然后打開Xcode王浴;

    xcode7.3中從菜單欄上選擇 Window菜單, 然后選擇 Devices (快捷方式是 Shift-CMD-2)在窗口上, 選中 Devices 標簽欄脆炎,在左側(cè)的導航面板上,選中設(shè)備名稱氓辣;Devices information下面的Device Logs是你所有設(shè)備(曾經(jīng)連接到Xcode的)的日志秒裕;每個設(shè)備下面的Device Logs是對應(yīng)設(shè)備的日志。

  • 3钞啸、應(yīng)用提交到App Store后几蜻,你也能從iTunes Connect 獲取到用戶的崩潰日志喇潘,登錄到iTunes Connect 上,選擇 Manage Your Applications梭稚, 點擊相應(yīng)的應(yīng)用颖低,點擊應(yīng)用圖標下面的View Details按鈕, 然后點擊右欄Links部分的 Crash Reports弧烤;如果沒有崩潰日志忱屑,試試點擊Refresh按鈕刷新一下。如果你的應(yīng)用用戶量還不多暇昂,或者剛上架不久莺戒,iTunes Connect賬號上也可能還沒有任何崩潰日志;如果有的話你就會看到不同iOS版本用戶下的崩潰信息急波。

2.crash日志分析

一从铲、如何獲得crash日志

當一個iOS應(yīng)用程序崩潰時,系統(tǒng)會創(chuàng)建一份crash日志保存在設(shè)備上澄暮。這份crash日志記錄著應(yīng)用程序崩潰時的信息名段,通常包含著每個執(zhí)行線程的棧調(diào)用信息(低內(nèi)存閃退日志例外),對于開發(fā)人員定位問題很有幫助泣懊。

如果設(shè)備就在身邊伸辟,可以連接設(shè)備,打開Xcode - Window - Organizer嗅定,在左側(cè)面板中選擇Device Logs(可以選擇具體設(shè)備的Device Logs或者Library下所有設(shè)備的Device Logs)自娩,然后根據(jù)時間排序查看設(shè)備上的crash日志用踩。這是開發(fā)渠退、測試階段最經(jīng)常采用的方式。

如果應(yīng)用程序已經(jīng)提交到App Store發(fā)布脐彩,用戶已經(jīng)安裝使用了碎乃,那么開發(fā)者可以通過iTunes Connect(Manage Your Applications - View Details - Crash Reports)獲取用戶的crash日志。不過這并不是100%有效的惠奸,而且大多數(shù)開發(fā)者并不依賴于此梅誓,因為這需要用戶設(shè)備同意上傳相關(guān)信息。

考慮到并不是所有iPhone用戶都允許自動發(fā)送診斷報告(crash日志)佛南,而且對于部分提交到Apple得crash日志梗掰,開發(fā)者還需要手動去拉取,然后找到對應(yīng)的符號文件進行解析——這是一件很繁瑣的事情嗅回。所以實際項目開發(fā)中及穗,通常接入現(xiàn)有的crash收集工具,或者自己編寫一個進行自動化收集绵载、解析和統(tǒng)計匯總埂陆。

二苛白、如何解析crash日志

當獲得一份crash日志時,我們需要將初始展示的十六進制地址等原始信息映射為源代碼級別的方法名稱和代碼行數(shù)焚虱,使其對開發(fā)人員可讀购裙。這個過程稱為符號化解析。要成功地符號化解析一份crash日志鹃栽,我們需要有對應(yīng)的應(yīng)用程序二進制文件以及符號(.dSYM)文件躏率。

如果處于開發(fā)調(diào)試階段,通常Xcode都能匹配到crash日志對應(yīng)的二進制文件和符號文件民鼓,所以能夠幫我們自動解析禾锤。

如果處于測試階段,測試人員已經(jīng)安裝了不同的版本(比如alpha摹察、beta版本)恩掷,那么需要保存好對應(yīng)版本的二進制文件和符號文件,以便在應(yīng)用程序崩潰時對crash日志進行解析供嚎。對于這種場景下產(chǎn)生的crash日志黄娘,只需要將.crash文件、.app文件和.dSYM文件三者放在同一個目錄下克滴,然后將.crash文件拖放到Xcode - Window - Organizer中左側(cè)面板Library下的Device Logs中逼争,即可進行解析。

如果要提交發(fā)布劝赔,那么我們通常會先執(zhí)行Clean誓焦,再Build,最后通過Product - Archive來打包着帽。這樣杂伟,Xcode會將二進制文件和符號文件歸檔在一起,可以通過Organizer中的Archives進行瀏覽仍翰。

三赫粥、如何分析crash日志

1.iOS策略

1.1 低內(nèi)存閃退

1.2 Watchdog超時

1.3 用戶強制退出

2.常見錯誤標識

2.1 Exception codes

2.2 Exception types

3.代碼bug 重點分析
以上只是列舉了一些crash日志的情況,具體的分析請參考:

http://blog.csdn.net/jasonblog/article/details/19031517

http://www.cocoachina.com/industry/20130725/6677.html

那么予借,比較常見的崩潰基本都源于代碼bug越平,比如數(shù)組越界、插空灵迫、多線程安全性秦叛、訪問野指針、發(fā)送未實現(xiàn)的selector等瀑粥。如果引入Core Data挣跋,則又有另外一些常見問題,不過這是另一個話題了利凑。

遇到這些bug時浆劲,都有比較清楚的錯誤原因說明嫌术,比如“index 0 beyond bounds for empty array”等。需要稍微注意點的是多線程問題牌借,當一時找不到解決思路時度气,不妨往多線程方面考慮下。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末膨报,一起剝皮案震驚了整個濱河市磷籍,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌现柠,老刑警劉巖院领,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異够吩,居然都是意外死亡比然,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門周循,熙熙樓的掌柜王于貴愁眉苦臉地迎上來强法,“玉大人,你說我怎么就攤上這事湾笛∫樱” “怎么了?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵嚎研,是天一觀的道長蓖墅。 經(jīng)常有香客問我,道長临扮,這世上最難降的妖魔是什么论矾? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮公条,結(jié)果婚禮上拇囊,老公的妹妹穿的比我還像新娘。我一直安慰自己靶橱,他們只是感情好,可當我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布路捧。 她就那樣靜靜地躺著关霸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪杰扫。 梳的紋絲不亂的頭發(fā)上队寇,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天,我揣著相機與錄音章姓,去河邊找鬼佳遣。 笑死识埋,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的零渐。 我是一名探鬼主播窒舟,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼诵盼!你這毒婦竟也來了惠豺?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤风宁,失蹤者是張志新(化名)和其女友劉穎洁墙,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體戒财,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡热监,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了饮寞。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片狼纬。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖骂际,靈堂內(nèi)的尸體忽然破棺而出疗琉,到底是詐尸還是另有隱情,我是刑警寧澤歉铝,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布盈简,位于F島的核電站,受9級特大地震影響太示,放射性物質(zhì)發(fā)生泄漏柠贤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一类缤、第九天 我趴在偏房一處隱蔽的房頂上張望臼勉。 院中可真熱鬧,春花似錦餐弱、人聲如沸宴霸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瓢谢。三九已至,卻和暖如春驮瞧,著一層夾襖步出監(jiān)牢的瞬間氓扛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工论笔, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留采郎,地道東北人千所。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像蒜埋,于是被迫代替她去往敵國和親淫痰。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內(nèi)容