如何在C++程序出错时自动生成堆栈跟踪

avatar
作者
筋斗云
阅读量:0

要在C++程序出错时自动生成堆栈跟踪,可以使用一些第三方库或操作系统提供的API

  1. 使用backward-cpp库:

backward-cpp是一个轻量级的、跨平台的C++堆栈跟踪库。首先,你需要安装这个库。在大多数Linux发行版中,可以使用包管理器来安装。例如,在Ubuntu上:

sudo apt-get install libbackward-cpp-dev 

然后,在你的C++代码中包含库并设置信号处理函数:

#include<iostream> #include<signal.h> #include <backward.hpp>  void signal_handler(int sig) {     backward::StackTrace st;     st.load_here(32);     backward::Printer p;     p.print(st, std::cerr);     exit(sig); }  int main() {     signal(SIGSEGV, signal_handler);     signal(SIGABRT, signal_handler);      // 你的代码... } 
  1. 使用glibcbacktracebacktrace_symbols函数(仅限于Linux):

首先,需要在编译时链接execinfo库:

g++ -o your_program your_program.cpp -rdynamic -lexecinfo 

然后,在你的C++代码中设置信号处理函数:

#include<iostream> #include<signal.h> #include <execinfo.h> #include <unistd.h>  void signal_handler(int sig) {     void* array[32];     int size = backtrace(array, 32);     char** symbols = backtrace_symbols(array, size);      std::cerr << "Error: signal "<< sig<< std::endl;     for (int i = 0; i< size; ++i) {         std::cerr<< symbols[i]<< std::endl;     }      free(symbols);     exit(sig); }  int main() {     signal(SIGSEGV, signal_handler);     signal(SIGABRT, signal_handler);      // 你的代码... } 

这两种方法都可以在程序出错时生成堆栈跟踪。你可以根据你的需求和平台选择合适的方法。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!