VisonVVVV 2017-10-13 01:08 采纳率: 0%
浏览 1085

代码中调用了backtrace等函数后无法生成core文件??

我的系统配置如下:
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 30277
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 65535
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 65535
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited

情况一:程序中没有调用backtrace、backtrace_symbols函数,程序崩溃时候,能生成core文件,
情况二:程序中调用了backtrace、backtrace_symbols函数,程序崩溃时候,不能生成core文件。

请问各路大神,有没有什么办法能够让程序崩溃时候 既能生成core文件,又能在在日志中将崩溃时候的 堆栈信息打印出来(通过调用backtrace、backtrace_symbols函数实现)?

  • 写回答

2条回答 默认 最新

  • VisonVVVV 2017-10-13 01:29
    关注

    补充下我的代码:

    以下代码分别注册SIGSEGV信号、SIGABRT信号的信号毁掉函数
    signal(SIGSEGV, WidebrightSegvHandler); // SIGSEGV 11

    signal(SIGABRT, WidebrightSegvHandler); // SIGABRT 6

    以下代码为信号注册函数
    static void WidebrightSegvHandler(int signum)
    {
    void *array[10];
    size_t size;
    char **strings;
    size_t i, j;

    signal(signum, SIG_DFL);
    
    size = backtrace (array, 15);
    strings = (char **)backtrace_symbols (array, size);
    
    //fprintf(stderr, "widebright received SIGSEGV! Stack trace:\n");
    log.info("widebright received SIGSEGV! Stack trace:\n");
    for (i = 0; i < size; i++) 
    {
        //fprintf(stderr, "%d %s \n",i,strings[i]);
        log.info("%d %s \n",i,strings[i]);
    }
    
    free (strings);
    exit(1);
    

    }

    评论

报告相同问题?

悬赏问题

  • ¥15 matlab(相关搜索:紧聚焦)
  • ¥15 基于51单片机的厨房煤气泄露检测报警系统设计
  • ¥15 路易威登官网 里边的参数逆向
  • ¥15 Arduino无法同时连接多个hx711模块,如何解决?
  • ¥50 需求一个up主付费课程
  • ¥20 模型在y分布之外的数据上预测能力不好如何解决
  • ¥15 processing提取音乐节奏
  • ¥15 gg加速器加速游戏时,提示不是x86架构
  • ¥15 python按要求编写程序
  • ¥15 Python输入字符串转化为列表排序具体见图,严格按照输入