#include <stacktrace> #include <iostream> void f() { std::cout << std::stacktrace::current() << std::endl; } int main() { f(); return 0; }
C++23で登場した関数なので
でしか利用できません
またGCCでビルドする場合は、コンパイラオプションとして-std=c++23 と -lstdc++expを指定する必要があります
スタックフレームを順番にバックトレースしたい場合は
for (auto frame : std::stacktrace::current()) { std::cout << frame << std::endl; }
と行った感じでコーディングできます
また
std::cout << std::stacktrace::current(2,4) << std::endl;
と,引数を指定するとスタックフレームの2番目を起点に,最大4個までスタックフレームが取り出せます
C++23が使えない場合は大量のコードを書く必要があります。詳細は過去のエントリに書いてます
glibc でバックトレースを表示する方法(その2) - pyopyopyo - Linuxとかプログラミングの覚え書き -
glibc でバックトレースを表示する方法 - pyopyopyo - Linuxとかプログラミングの覚え書き -
C でバックトレース表示 - pyopyopyo - Linuxとかプログラミングの覚え書き -