以下是我的代码
// C++ program to illustrate the use of stacktrace
#include <iostream>
#include <stacktrace>
#include <string>
using namespace std;
// dummy function
void foo() {
// creating and initializing stacktrace object
stacktrace st = stacktrace::current();
// printing stacktrace
cout << to_string(st);
}
// driver code
int main() {
foo();
return 0;
}
我使用以下 cli 构建 cpp
/tmp $ g++-13 -std=c++23 -o t /home/roroco/Dropbox/cpp/cpp_lib/draft/draft/test_out_backtrace.cpp -lstdc++_libbacktrace
/home/roroco/Dropbox/cpp/cpp_lib/draft/draft/test_out_backtrace.cpp: In function ‘void foo()’:
/home/roroco/Dropbox/cpp/cpp_lib/draft/draft/test_out_backtrace.cpp:11:5: error: ‘stacktrace’ was not declared in this scope
11 | stacktrace st = stacktrace::current();
| ^~~~~~~~~~
/home/roroco/Dropbox/cpp/cpp_lib/draft/draft/test_out_backtrace.cpp:4:1: note: ‘std::stacktrace’ is defined in header ‘<stacktrace>’; did you forget to ‘#include <stacktrace>’?
3 | #include <stacktrace>
+++ |+#include <stacktrace>
4 | #include <string>
/home/roroco/Dropbox/cpp/cpp_lib/draft/draft/test_out_backtrace.cpp:14:23: error: ‘st’ was not declared in this scope; did you mean ‘std’?
14 | cout << to_string(st);
| ^~
|
我确信 /usr/include/c++/13/stacktrace 存在,如何修复这个错误
我找到原因了, 我用
apt install gcc-13
安装 gcc,这个 gcc 不编译 stacktrace 模块,构建 gcc 时应该使用 --enable-libstdcxx-backtrace=yes 构建以包含 stacktrace
构建并使用我编译的 gcc 会使问题变得复杂,所以我使用 boost stacktrace 而不是 std::stracktrace