c - 程序内部的堆栈帧信息/回溯打印,而不是使用 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 消息和信号号。
你能建议里面出了什么问题吗
解决方案
推荐阅读
- arrays - 指向二维数组的 Swift 原始指针
- labview - 如何读取labview生成的波形图的速度?
- python - 虽然并继续问题
- javascript - 使用 Javascript if && 检查元素是否有一个类但没有另一个
- sql - 带有 JOINS 的 SQL SUM
- floating-point - float可以表示的最大奇数是多少
- tensorflow - Tensorflow 无法将手动创建的模型与使用层 api 的模型相协调
- python - 从终端运行带有模块的python程序
- javascript - javascript中带有窗口警报的打印功能
- reactjs - React-virtualized WindowScroller,滚动显示在表级别而不是窗口