class template
std::basic_stacktrace
概要
basic_stacktrace
は、現在位置からその関数がどこで呼び出されたかの履歴を取得するためのクラスである。この機能は、デバッグに役立つ。
プラットフォームごとのデフォルトのアサーション機能は、その失敗時にバグの全体像を説明できないため、問題を特定するために十分な情報を提供しない。このクラスを使用することで、ユーザーはデバッグのために必要十分な情報を任意に取得できる。
このクラスは、アロケータ対応コンテナ、シーケンスコンテナ、逆順コンテナの要件を満たす。ただし、
const
修飾されたコンテナに対して定義されたムーブ、代入、swap、および操作のみがサポートされる
- 比較関数のセマンティクスはコンテナのものと異なる
備考
- このクラスは、仕様としてシグナル安全ではない
- 元となったBoost.Stacktraceライブラリの実装はシグナルハンドラ中でもスタックトレースを出力できる機能を提供するが、標準の本機能はその機能を提供しない
- そのような機能は一部のプラットフォームでは実装できないためである
- ただし、実装がシグナル安全である場合がある
- GCC (libstdc++) が内部で使用しているlibbacktraceライブラリは、シグナル安全である。ただしlibstdc++の実装仕様としてシグナル安全であるという明記はない
メンバ関数
構築・破棄
アロケータ
イテレータ
名前 |
説明 |
対応バージョン |
begin |
先頭の要素を指すイテレータを取得する |
C++23 |
end |
末尾の次を指すイテレータを取得する |
C++23 |
cbegin |
先頭の要素を指す読み取り専用イテレータを取得する |
C++23 |
cend |
末尾の次を指す読み取り専用イテレータを取得する |
C++23 |
rbegin |
末尾の要素を指す逆順イテレータを取得する |
C++23 |
rend |
先頭の前を指す逆順イテレータを取得する |
C++23 |
crbegin |
末尾の要素を指す読み取り専用逆順イテレータを取得する |
C++23 |
crend |
先頭の前を指す読み取り専用逆順イテレータを取得する |
C++23 |
領域
名前 |
説明 |
対応バージョン |
size |
スタックトレースの履歴数を取得する |
C++23 |
max_size |
格納可能な最大の要素数を取得する |
C++23 |
empty |
スタックトレースの履歴が空かどうかを判定する |
C++23 |
要素アクセス
名前 |
説明 |
対応バージョン |
operator[] |
任意の位置の要素を取得する |
C++23 |
at |
任意の位置の要素を取得する |
C++23 |
変更
名前 |
説明 |
対応バージョン |
swap |
他のbasic_stacktrace オブジェクトとデータを入れ替える |
C++23 |
静的メンバ関数
名前 |
説明 |
対応バージョン |
current |
現在位置からのスタックトレースを取得する |
C++23 |
メンバ型
名前 |
説明 |
対応バージョン |
value_type |
要素型 stacktrace_entry |
C++23 |
const_reference |
const 参照型 const value_type& |
C++23 |
reference |
参照型 value_type& |
C++23 |
const_iterator |
読み取り専用イテレータ型。実装定義のランダムアクセスイテレータ |
C++23 |
iterator |
イテレータ型 const_iterator |
C++23 |
reverse_iterator |
逆順イテレータ型 reverse_iterator<iterator> |
C++23 |
const_reverse_iterator |
読み取り専用逆順イテレータ型 reverse_iterator<const_iterator> |
C++23 |
diferrence_type |
イテレータの差を表す型。実装定義 |
C++23 |
size_type |
要素数を表す型。実装定義 |
C++23 |
allocator_type |
アロケータ型 allocator |
C++23 |
非メンバ関数
値の入れ替え
名前 |
説明 |
対応バージョン |
swap |
2つのbasic_stacktrace オブジェクトを入れ替える |
C++23 |
入出力
文字列への変換
比較演算子
名前 |
説明 |
対応バージョン |
operator== |
等値比較を行う |
C++23 |
template <class Allocator2> bool operator!=(const basic_stacktrace&, const basic_stacktrace<Allocator2>&) noexcept; |
非等値比較を行う (== により使用可能) |
C++23 |
operator<=> |
三方比較を行う |
C++23 |
template <class Allocator2> strong_ordering operator<(const basic_stacktrace&, const basic_stacktrace<Allocator2>&) noexcept; |
左辺が右辺より小さいかを判定する (<=> により使用可能) |
C++23 |
template <class Allocator2> strong_ordering operator<=(const basic_stacktrace&, const basic_stacktrace<Allocator2>&) noexcept; |
左辺が右辺以下かを判定する (<=> により使用可能) |
C++23 |
template <class Allocator2> strong_ordering operator>(const basic_stacktrace&, const basic_stacktrace<Allocator2>&) noexcept; |
左辺が右辺より大きいかを判定する (<=> により使用可能) |
C++23 |
template <class Allocator2> strong_ordering operator>=(const basic_stacktrace&, const basic_stacktrace<Allocator2>&) noexcept; |
左辺が右辺以上かを判定する (<=> により使用可能) |
C++23 |
ハッシュサポート
名前 |
説明 |
対応バージョン |
template <class T> struct hash; |
hash クラスの先行宣言 |
C++23 |
template <class Allocator> struct hash<basic_stacktrace<Allocator>>; |
hash クラスのbasic_stacktrace に対する特殊化 |
C++23 |
文字列フォーマットサポート
名前 |
説明 |
対応バージョン |
template <class Allocator> struct formatter<basic_stacktrace<Allocator>>; |
formatter の特殊化 |
C++23 |
例
基本的な使い方
出力例 (GCC)
0# g() at /app/example.cpp:5
1# f() at /app/example.cpp:10
2# main at /app/example.cpp:14
3# at :0
4# __libc_start_main at :0
5# _start at :0
6#
スタックトレースを出力するアサーションマクロを作る
出力例 (GCC)
Expression 'i >= 0' is false in f(int) at /app/example.cpp:15
バージョン
言語
処理系
備考
- GCCでは、以下のコンパイルオプションを追加で指定する必要がある:
- 13まで :
-lstdc++_libbacktrace
- 14以降 :
-lstdc++exp
参照