android native crash的处理机制
生活随笔
收集整理的這篇文章主要介紹了
android native crash的处理机制
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
攔截所有信號
Linux信號機制
1.程序奔潰在Unix-like系統中,所有的崩潰都是編程錯誤或者硬件錯誤相關的,系統遇到不可恢復的錯誤時會觸發崩潰機制讓程序退出,如除零、段地址錯誤等。異常發生時,CPU通過異常中斷的方式,觸發異常處理流程。不同的處理器,有不同的異常中斷類型和中斷處理方式。linux把這些中斷處理,統一為信號量,可以注冊信號量向量進行處理。信號機制是進程之間相互傳遞消息的一種方法,信號全稱為軟中斷信號。2.信號機制函數運行在用戶態,當遇到系統調用、中斷或是異常的情況時,程序會進入內核態。信號涉及到了這兩種狀態之間的轉換。(1) 信號的接收接收信號的任務是由內核代理的,當內核接收到信號后,會將其放到對應進程的信號隊列中,同時向進程發送一個中斷,使其陷入內核態。注意,此時信號還只是在隊列中,對進程來說暫時是不知道有信號到來的。(2) 信號的檢測進程陷入內核態后,有兩種場景會對信號進行檢測:進程從內核態返回到用戶態前進行信號檢測 進程在內核態中,從睡眠狀態被喚醒的時候進行信號檢測 當發現有新信號時,便會進入下一步,信號的處理。(3) 信號的處理信號處理函數是運行在用戶態的,調用處理函數前,內核會將當前內核棧的內容備份拷貝到用戶棧上,并且修改指令寄存器(eip)將其指向信號處理函數。接下來進程返回到用戶態中,執行相應的信號處理函數。信號處理函數執行完成后,還需要返回內核態,檢查是否還有其它信號未處理。如果所有信號都處理完成,就會將內核棧恢復(從用戶棧的備份拷貝回來),同時恢復指令寄存器(eip)將其指向中斷前的運行位置,最后回到用戶態繼續執行進程。至此,一個完整的信號處理流程便結束了,如果同時有多個信號到達,上面的處理流程會在第2步和第3步驟間重復進行。(4) 常見信號量類型系統的默認處理
Android 平臺 Native 代碼的崩潰捕獲機制及實現
總結
以上是生活随笔為你收集整理的android native crash的处理机制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: armeabi-v7a/arm64-v8
- 下一篇: ptrace和wait的理解 (ptra