- 一句话,简单好用不费事。
使用信号处理机制
当程序遇到段错误或内存访问违规时,操作系统会向程序发送 SIGSEGV 信号。你可以注册一个信号处理函数来捕获并记录这种信号发生时的信息,包括崩溃地址。
1、注册信号处理函数:
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
void sigsegv_handler(int sig) {
void *trace[16];
char **messages = NULL;
int i, trace_size = 0;
trace_size = backtrace(trace, 16);
messages = backtrace_symbols(trace, trace_size);
printf("Caught SIGSEGV: Segmentation fault\n");
for (i = 0; i < trace_size; i++) {
printf("%s\n", messages[i]);
}
free(messages);
exit(EXIT_FAILURE);
}
int main() {
// 注册 SIGSEGV 信号处理函数
signal(SIGSEGV, sigsegv_handler);
// 造成段错误的操作
int *ptr = NULL;
*ptr = 42; // 引发段错误
return 0;
}
- signal(SIGSEGV, sigsegv_handler) 注册了一个自定义的信号处理函数 sigsegv_handler,用于处理 SIGSEGV 信号(段错误)。
- 在 sigsegv_handler 函数中,使用 backtrace()

最低0.47元/天 解锁文章
6935

被折叠的 条评论
为什么被折叠?



