http://www.cnblogs.com/shakin/p/4268399.htmlhtml
http://blog.chinaunix.net/uid-1877180-id-3011232.html函數
其餘關鍵字:Google Breakpadui
Docs:google
https://chromium.googlesource.com/breakpad/breakpad/+/master/docs/spa
Source:.net
https://chromium.googlesource.com/breakpad/breakpaddebug
具體使用方法:(google-breakpad)unix
http://www.cnblogs.com/catch/archive/2013/02/02/2882016.html指針
Android系統中應用出現nativecrash時,會在 /data/tombstones
目錄下生成 tombstone_xx 的日誌文件,記錄了應用crash發生時的內存、寄存器、堆棧信息等。而且經過logcat將其內容輸出。日誌
SA_SIGINFO : 使其能夠知道本身是被什麼進程,那個用戶,發來的什麼信號,發來該信號的具體的緣由是什麼
SA_RESETHAND :
SA_NODEFER :
SA_INTERRUPT 由此信號中斷的系統調用不會自動重啓
SA_RESTART 由此信號中斷的系統調用會自動重啓
SA_SIGINFO 提供附加信息,一個指向siginfo結構的指針以及一個指向進程上下文標識符的指針
(2) SA_NODEFER 通常狀況下, 當信號處理函數運行時,內核將阻塞<該給定信號 -- SIGINT>。可是若是設置了SA_NODEFER標記, 那麼在該信號處理函數運行時,內核將不會阻塞該信號。 SA_NODEFER是這個標記的正式的POSIX名字(還有一個名字SA_NOMASK,爲了軟件的可移植性,通常不用這個名字)
SA_RESETHAND 當調用信號處理函數時,將信號的處理函數重置爲缺省值。 SA_RESETHAND是這個標記的正式的POSIX名字(還有一個名字SA_ONESHOT,爲了軟件的可移植性,通常不用這個名字)
Android 4.0中tombstones處理部分的源碼位於 /system/core/debuggerd
和 bonic/linker/debugger.c
中。
在 bonic/linker/debugger.c
中的 debugger_init()
中對7個Signal進行了註冊處理,debugger_signal_handler
做爲信號處理函數。
void debugger_init() { struct sigaction act; memset(&act, 0, sizeof(act)); act.sa_sigaction = debugger_signal_handler; act.sa_flags = SA_RESTART | SA_SIGINFO; sigemptyset(&act.sa_mask); sigaction(SIGILL, &act, NULL); sigaction(SIGABRT, &act, NULL); sigaction(SIGBUS, &act, NULL); sigaction(SIGFPE, &act, NULL); sigaction(SIGSEGV, &act, NULL); sigaction(SIGSTKFLT, &act, NULL); sigaction(SIGPIPE, &act, NULL); }