Androdi native Crash log & linux crash handler

传送:

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 tombstones 分析

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);
}
相关文章
相关标签/搜索