(资料图片仅供参考)
在C/C++代码内捕获异常信号发出时的调用栈信息。
函数实现
#include #include static void backtrace_handler_V1(int sig){ void *array[128]; size_t size; // get void*"s for all entries on the stack size = backtrace(array, 10); // print out all the frames to stder backtrace_symbols_fd(array, size, STDERR_FILENO); exit(1);}void backtrace_handler_V2(int sig) { void* callstack[128]; int frames = backtrace(callstack, 128); char** strs = backtrace_symbols(callstack, frames); for (int i = 0; i < frames; ++i) { printf("%s\n", strs[i]); } free(strs); exit(1);}
测试代码:
int main(int argc, char **argv){ //注册捕捉总线错误时打印堆栈处理的函数 signal(SIGBUS, backtrace_handler_V1); //注册捕捉段错误时打印堆栈处理的函数 signal(SIGSEGV, backtrace_handler_V1); return 0;}
注解: