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 三菱伺服电机按启动按钮有使能但不动作
  • ¥20 为什么我写出来的绘图程序是这样的,有没有lao哥改一下
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥200 关于#c++#的问题,请各位专家解答!网站的邀请码
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号