在编写稳定可靠的软件服务时经常用到输出堆栈信息,以便用户/开发者获取准确的运行信息。常用在日志输出,错误报告,异常检测。

在Linux有比较简便的函数获取堆栈信息:

Android培训,安卓培训,手机开发培训,移动开发培训,云培训培训

#include <stdio.h>#include <execinfo.h>#include <signal.h>#include <stdlib.h>#include <unistd.h>void handler(int sig) {  void *array[5];
  size_t size;  // get void*'s for all entries on the stack
  size = backtrace(array, 5);  // print out all the frames to stderr
  fprintf(stderr, "Error: signal %d:\n", sig);  char** msgs = backtrace_symbols(array, size);  for(int i=1;i<size && msgs[i];++i)
    printf("[%d] %s\n", i, msgs[i]);
  exit(1);
}void baz() { int *foo = (int*)-1; // make a bad pointer
  printf("%d\n", *foo);       // causes segfault}void bar() { baz(); }void foo() { bar(); }int main(int argc, char **argv) {
  signal(SIGSEGV, handler);   // install our handler
  foo(); // this will call foo, bar, and baz.  baz segfaults.}

Android培训,安卓培训,手机开发培训,移动开发培训,云培训培训

 

以上代码从参考的stacko