zoukankan      html  css  js  c++  java
  • backtrace打印进程异常退出时的堆栈信息

    #include <execinfo.h>
    
    #include "debug_trace.h"
    
    #define TRACE_SIZE 1024
    
    static void trace_print(int signal_type)
    {
     int trace_id = -1;
    
     void *buffer[100];
     char **info = NULL;
    
     trace_id = backtrace(buffer, TRACE_SIZE);
    
     info = backtrace_symbols(buffer, trace_id);
     if (NULL == info)
     {
      return;
     }
    
     int i = 0;
     char trace_buff[TRACE_SIZE];
    
     for (i = 0; i < trace_id; i++)
     {
         sprintf(trace_buff, "echo %s >> ./trace_info_%d.txt", info[i], signal_type);
      system(trace_buff);
     }
     sprintf(trace_buff, "echo \"###################################\" >> ./trace_info_%d.txt", signal_type);
     system(trace_buff);
    }
    
    static void signal_hadle_fun(int signal_type)
    {
    
    
     switch(signal_type)
     {
     case SIGHUP:
     case SIGINT:
     case SIGQUIT:
     case SIGILL:
     case SIGTRAP:
      
     case SIGABRT:
     case SIGBUS:
     case SIGFPE:
     case SIGKILL:
     case SIGSEGV:
      
     case SIGPIPE:
     case SIGTERM:
      trace_print(signal_type);
      exit(0);
      break;
     }
    }
    
    void debug_trace_init(void)
    {
     signal(SIGHUP, signal_hadle_fun);
     signal(SIGINT, signal_hadle_fun);
     signal(SIGQUIT, signal_hadle_fun);
     signal(SIGILL, signal_hadle_fun);
     signal(SIGTRAP, signal_hadle_fun);
     
     signal(SIGABRT, signal_hadle_fun);
     signal(SIGBUS, signal_hadle_fun);
     signal(SIGFPE, signal_hadle_fun);
     signal(SIGKILL, signal_hadle_fun);
     signal(SIGSEGV, signal_hadle_fun);
     
     signal(SIGPIPE, signal_hadle_fun);
     signal(SIGTERM, signal_hadle_fun);
    }

  • 相关阅读:
    递归的小实例
    try-catch-finally实例
    集合的排序(正序,倒序,从大到小排序)
    数组的排序(sort和冒泡)
    拦截器的使用,不登录用户不能进行其他操作
    把日志从数据库导出到Excel表格中(poi)
    Java 对Excel进行导入操作
    java 面试题集锦
    端口被占用解决办法
    (转)Java 最常见的 200+ 面试题汇总
  • 原文地址:https://www.cnblogs.com/wangfengju/p/6173061.html
Copyright © 2011-2022 走看看