Crash日志的介紹

崩潰報告crash分析

crash.png

每一個崩潰報告的每個部分都有崩潰原因的信息,一般分為6部分
1 報告頭 (Header )
2 異常代碼(Exception Codes)
3 應用詳情(Application Specific Information)

  1. 回溯(Backtrace)
  2. 線程狀態(Thread State)
  3. 二進制映像(Binary Images)

Header

標頭:開頭部分描述了崩潰發生的環境


截屏2021-05-17 下午8.44.41.png

Incident Identifier: 報告的唯一標識符,兩份報告決不會共享同一個事件標識符
CrashReporter Key:每個設備的匿名標識符,來自同一設備的兩個報告將包含相同的值
Hardware Model:運行該應用程序的特定設備型號
Process:崩潰的進程的可執行文件名稱
Path:可執行文件在磁盤上的位置。macOS用占位符值替換了用戶可識別的路徑組件,以保護隱私
AppStoreTools:Xcode的版本
AppVariant:通過應用程序細化產生的應用程序的特定變體
Code Type:崩潰的進程的CPU體系結構。ARM-64,ARM,X86-64,或X86
Parent Process:啟動崩潰進程的進程的名稱和進程ID
Coalition:包含應用程序的名稱

Date/Time :崩潰的日期和時間
Launch Time:應用啟動的日期和時間
OS Version:發生崩潰的操作系統版本

異常信息(Exception Codes)

截屏2021-05-20 下午4.35.58.png

該部分告訴app過程如何終止
Exception Type:終止進程的Mach異常的名稱,以及括號中相應終止信號的名稱Unix
Exception Subtype:異常代碼描述
Exception Note:并非特定于一種異常類型的其他信息。如果包含此字段,則崩潰不是由硬件陷阱引起的,要么是由于進程已由操作系統明確終止,要么是由于進程被稱為。如果此字段包含,則進程不會崩潰,但是操作系統隨后可能已請求終止進程。如果此字段包含,則該過程不會終止,因為創建崩潰報告的問題不是致命的
VM Region Info:區域信息
Termination Signal:終止信號
Termination Reason:操作系統終止進程時指定的退出原因信息
Triggered by Thread或Crashed Thread:引發異常的線程

Exception Type

異常類型(Exception Type) 有以下幾種:

  • Bad Memory Access(壞內存訪問) [EXC_BAD_ACCESS // SIGSEGV // SIGBUS],這種類型的 Exception 是最為常見的 Crash ,通常是由于訪問了無效的內存導致的。
    SIGSEGV:訪問了無效地址,沒有物理內存對應該地址,通常由于重復釋放對象導致。
    SIGBUS:總線錯誤,與 SIGSEGV 不同的是,SIGBUS 訪問的是有效地址,但總線訪問異常,通常是訪問了未對齊的數據。
    SEGV:代表無效內存地址,比如空指針、未初始化指針、棧溢出等。

  • Abnormal Exit (異常退出) [EXC_CRASH // SIGABRT]
    SIGABRT:收到Abort信號退出,通常Foundation庫中的容器為了保護狀態正常會做一些檢測,例如插入nil到數組或字典中等會遇到此類錯誤。(常見的是再網絡請求時發生)。

  • 其它異常類型,有些異常類型沒有被命名,以16進制數字表示。
    0xbaaaaaad:意味著該Crash log并非一個真正的Crash,它僅僅只是包含了整個系統某一時刻的運行狀態,由用戶同時按[Home鍵]和音量鍵觸發。
    0xbad22222:當VoIP程序在后臺太過頻繁的激活時,系統可能會終止此類程序。
    0x8badf00d:程序啟動或者恢復時間過長被watch dog終止。
    0xc00010ff:程序執行大量耗費CPU和GPU的運算,導致設備過熱,觸發系統過熱保護被系統終止。
    0xdead10cc:程序退到后臺時還占用[系統資源](如通訊錄)被系統終止。
    0xdeadfa11:程序無響應用戶強制退出。當用戶長按電源鍵,直到屏幕出現關機確認畫面后再長按[Home鍵],將強制退出應用。我們可以合理認為用戶這么做的原因是應用程序沒有響應。

應用詳情(Application Specific Information)

截屏2021-05-23 下午4.29.55.png

有些Crash出現時,會產生額外的信息,這些信息能幫助用戶更好地了解應用程序終止時的運行環境。

回溯(Backtrace)

每個回溯的第一行列出了線程號和線程名。Xcode中的崩潰管理器提供的崩潰報告不包含線程名稱。
24611262-ae2b2ad852292a85.png

在線程號之后,回溯的每一行代表回溯中的堆棧

  • 2 :堆棧幀號,堆棧幀按調用順序排列
  • xxx:正在執行的函數的二進制文件的名稱
  • 0x0000000107fc24a4:正在執行的機器指令的地址
  • [AFURLSessionManagerTaskDelegate URLSession:task:didCompleteWithError:]:在完全符號化的崩潰報告中,正在執行的函數的名稱
  • 62104740:當前指令的字節偏移量。
  • AFURLSessionManager.m: 183:包含代碼的文件名和行號

線程狀態(Thread State)

這部分列出了發生Crash的線程的狀態,即寄存器和寄存器的值


截屏2021-05-23 下午4.34.06.png

二進制映像(Binary Images)

24611262-90b566a1cb05ebaa.png

此列表包含上一示例中的組件:

  • 0x104324000 - 0x108707fff 進程中二進制映像的地址范圍。第一個地址是二進制文件的加載地址
  • xxx 二進制名稱
  • arm64 CPU
  • 2xxxxxxxxxxxxxxxxxxxx3 唯一標識二進制映像的構建UUID。當符號崩潰報告時,使用此值來找到相應的文件
  • /var/containers/Bundle/Application/.. 磁盤上二進制文件的路徑
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 崩潰分析 崩潰日志(crash log) 根據符號表來監測崩潰位置 什么是符號表符號表就是指在Xcode項目編譯后...
    紙簡書生閱讀 5,749評論 0 17
  • LLVM簡介 XCode4.0以后,LLVM是構架編譯器(compiler)的框架系統,以C++編寫而成,用于優化...
    苦工閱讀 9,735評論 1 16
  • Crash我們不得不面對的問題,但是好多人在遇到Crash的時候都無從下手,很多的時候都是憑著感覺找問題。今天我做...
    SunshineBrother閱讀 1,118評論 0 1
  • Crash我們不得不面對的問題,但是好多人在遇到Crash的時候都無從下手,很多的時候都是憑著感覺找問題。今天我做...
    SunshineBrother閱讀 3,566評論 0 4
  • 如何查看crash日志 頭部信息 Incident Identifier: B6FD1E8E-B39F-430B-...
    cana_win閱讀 2,425評論 0 1