Avatar ·

如何在C++程序崩溃时自动获取堆栈跟踪(stacktrace)?

大家好!我在Linux下使用GCC编译器编写C++,经常遇到难以调试的bug。程序会因segmentation fault崩溃,但我无法确定具体位置,因为崩溃很少发生且出现在随机位置。 我已经使用了assert,但当bug与内存损坏或缓冲区溢出相关时,它们没有帮助。我希望在任何崩溃(SIGSEGV、SIGABRT、SIGFPE等)时,程序能自动输出完整的堆栈调用,包括函数名、文件和行号。 以下是我的崩溃代码示例: ```cpp #include #include void dangerous_function(int* ptr) { *ptr = 42; // 如果ptr == nullptr,这里可能发生segfault } int main() { std::vector vec(10); int* bad_ptr = nullptr; dangerous_function(bad_ptr); // 崩溃! return 0; } ``` 我听说过backtrace()和backtrace_symbols(),但它们只输出地址,而不是可读的函数名。如何获取可读的堆栈信息?