做安卓開發的同學對于tombstone問題應該是很熟悉了,但是對于如何排查和分析值得總結和整理的,這篇文章對入門安卓開發的技術來說是個入門指導,同時對安卓開發的中高級開發也有借鑒。
首先我們來說下什么是tombstone :
當一個動態庫(native 程序)開始執行時,系統會注冊一些連接到 debuggerd 的 signal handlers,當系統 crash 的時候,會保存一個 tombstone 文件到/data/tombstones目錄下(Logcat中也會有相應的信息),文件的確就像墓碑一樣記錄了死亡了的進程的基本信息(例如進程的進程 號,線程號),死亡的地址(在哪個地址上發生了 Crash),死亡時的現場是什么樣的(記錄了一系列的堆棧調用信息)等等。
舉例來看一個tombstone文件:
一個tombstone文件大概包含以下信息
--------- beginning of crash
F/libc ( 244): invalid address or address of corrupt block 0xb82f54a0 passed to dlfree
I/libc ( 244): debuggerd_signal_handler called: signal=11, fn=0xb6fbdaa1
F/libc ( 244): Fatal signal 11 (SIGSEGV), code 1, fault addr 0xdeadbaad in tid 244 (mediaserver)
I/libc ( 244): exit from debuggerd_signal_handler
W/NativeCras