在程序内部堆叠框架信息/回溯打印,而不使用GDB

问题描述

如果存在SIGSEGV的问题,我们要求“在程序内部打印回跟踪信息”。 基于堆栈溢出中提供的链接集 我正在通过print_trace()函数使用“ backtrace_symbols_fd()”

void print_trace() {
    char pid_buf[30];
    sprintf(pid_buf,"%d",getpid());
    char name_buf[512];
    name_buf[readlink("/proc/self/exe",name_buf,511)]=0;
    int child_pid = fork();
    if (!child_pid) {
        dup2(2,1); // redirect output to stderr
        fprintf(stdout,"stack trace for %s pid=%s\n",pid_buf);
        execlp("gdb","gdb","--batch","-n","-ex","thread","bt",pid_buf,NULL);
        abort(); /* If gdb Failed to start */
    } else {
        waitpid(child_pid,NULL,0);
    }
}

它不是在程序内部打印print_trace()信息,而只是在打印SIGSEGV消息 &信号编号。

能否请您指出内部发生了什么问题

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)