深入分析Android native exception框架

1. Native application
   
本地應用程序是指可以直接運行在操作系統上,並且處理器直接執行機器碼的程序。
        比如windows上的各種*.exe的程序,而linux上的是各種bin程序。
    在Android上,OS是linux,因此各種bin程序就是所謂natvie application了,比如/system/bin目錄下的所有文件。
    這些應用程序都是由GCC(c/c++)編譯生成。
    在Android軟件架構裏,這些應用程序組成了native layer:
Android軟件棧

2. Native Exception
    native layer裏的應用程序崩潰統稱爲Native Exception,比如空指針,非法指針,程序跑飛,內存踩壞等,好比像windows下,程序崩潰彈出某某地址不能爲read/write。

3. 總流程圖
    原始的linux,對於用戶進程崩潰之後,處理方式有2種:直接終止進程;輸出coredump再終止進程。
    而在Android,爲了方便調試,在收到崩潰信號後,會先輸出tombstone,然後在根據設置是否抓取coredump,最後再終止進程。而我司在這之上還會將coredump及其他關鍵信息打包。
    以下是完整的NE處理流程圖:

4. 例子
    我們以1個NE的例子來將流程走一遍。
    首先寫test.c

    然後編寫Android.mk:
LOCAL_PATH:=$(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:=test.c
LOCAL_MODULE:=test
include $(BUILD_EXECUTABLE)
    編譯後將test推送到手機端,然後執行它,其中走過的函數步驟如下:

    當走到d()函數(也就是第6步之後)時必然產生1個NE。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章