前言:
而今看官们对“c语言文件读取代码”大致比较注重,兄弟们都想要学习一些“c语言文件读取代码”的相关内容。那么小编也在网络上收集了一些对于“c语言文件读取代码””的相关知识,希望我们能喜欢,同学们一起来学习一下吧!C 语言程序由于段错误发生复位时,调用栈信息非常有利于问题定位。基于此述求,我们可以在程序中接管 SGISEGV 信号,在信号处理函数中打印或保存调用栈信息即可实现。
// 文件名: backtrace.c#include <execinfo.h>#include <stdlib.h>#include <stdio.h>#include <signal.h>#include <fcntl.h>#include <unistd.h>#define FRAME_SIZE 100void dump(int signum) { printf("signum: %d\n", signum); const int size = FRAME_SIZE; void *buffer[size]; int stack_size = backtrace(buffer, size); // 打印信息到终端 char **stacktrace = backtrace_symbols(buffer, stack_size); if (stacktrace) { for (int i = 0; i < stack_size; ++i) { printf("%s\n", stacktrace[i]); } free(stacktrace); } // 保存信息到文件 char core_name[64] = {}; snprintf(core_name, 64, "core.%d", getpid()); int fd = open(core_name, 'w'); if (fd) { backtrace_symbols_fd(buffer, stack_size, fd); close(fd); } exit(0);} void test1() { // 模拟一个 SIGSEGV 信号 int *a = NULL; *a = 1;}void test2() { test1();}void test3() { test2();}int main(int argc, char const *argv[]){ signal(SIGSEGV, dump); test3(); return 0;}
编译及运行指令如下:
gcc -rdynamic backtrace.c -o backtrace -g && ./backtrace
版权声明:
本站文章均来自互联网搜集,如有侵犯您的权益,请联系我们删除,谢谢。
标签: #c语言文件读取代码