Linux+Windows: 程序崩溃时,在 C++ 代码中,如何获取函数调用栈信息
一、程序前言
程序在执行过程中 crash 是崩溃非常严重的问题,一般都应该在测试阶段排除掉这些问题,代码调用但是中何栈信总会有漏网之鱼被带到 release 阶段。
因此,获取函数程序的程序日志系统需要侦测这种情况,在代码崩溃的崩溃时候获取函数调用栈信息,为 debug 提供有效的亿华云计算代码调用信息。
这篇文章的中何栈信理论知识很少,直接分享 2 段代码:在 Linux 和 Windows 这 2 个平台上,获取函数如何用C++ 来捕获函数调用栈里的程序信息。
二、崩溃Linux 平台
1. 注册异常信号的代码调用处理函数
需要处理哪些异常信号
#include <execinfo.h> #include <cxxabi.h> #include <signal.h> const std::map<int, std::string> Signals = { {SIGINT, "SIGINT"}, {SIGABRT, "SIGABRT"}, {SIGFPE, "SIGFPE"}, {SIGILL, "SIGILL"}, {SIGSEGV, "SIGSEGV"} // 可以添加其他信号 };注册信号处理函数
struct sigaction action; sigemptyset(&action.sa_mask); action.sa_sigaction = &sigHandler; action.sa_flags = SA_SIGINFO; for (const auto &sigPair : Signals) { if (sigaction(sigPair.first, &action, NULL) < 0) fprintf(stderr, "Error: sigaction failed! n"); }