阅读量:0
要在C++程序出错时自动生成堆栈跟踪,可以使用一些第三方库或操作系统提供的API
- 使用
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); // 你的代码... }
- 使用
glibc
的backtrace
和backtrace_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); // 你的代码... }
这两种方法都可以在程序出错时生成堆栈跟踪。你可以根据你的需求和平台选择合适的方法。