在Linux中运行的C++程序,如果抛出的异常(exception)未被捕获,则可以用一些方法强行打印出调用栈(callstack),以下仅为示例:
#include <exception>
#include <iostream>
#include <string>
#include <execinfo.h>
#include <unistd.h>
using namespace std;
void print_trace(void) {
size_t i, size;
enum Constexpr { MAX_SIZE = 1024 };
void *array[MAX_SIZE];
size = backtrace(array, MAX_SIZE);
backtrace_symbols_fd(array, size, STDOUT_FILENO);
puts("");
}
int main(int argc, char* argv[])
{
std::set_terminate([](){
cout << "Unhandled exception with callstack:" << std::endl;
print_trace();
std::abort();
});
throw runtime_error("This is an exception");
return 0;
}
参考文档: