首页 > 解决方案 > 程序内部的堆栈帧信息/回溯打印,而不是使用 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",name_buf,pid_buf);
        execlp("gdb", "gdb", "--batch", "-n", "-ex", "thread", "-ex", "bt", name_buf, pid_buf, NULL);
        abort(); /* If gdb failed to start */
    } else {
        waitpid(child_pid,NULL,0);
    }
}

它没有打印程序内部的 print_trace() 信息,它只是打印 SIGSEGV 消息和信号号。

你能建议里面出了什么问题吗

标签: clinuxstackgdbprintstacktrace

解决方案


推荐阅读