Namespaces
Variants

std:: basic_stacktrace

From cppreference.net
ヘッダー <stacktrace> で定義
template < class Allocator >
class basic_stacktrace ;
(1) (C++23以降)
using stacktrace =
std :: basic_stacktrace < std:: allocator < std:: stacktrace_entry >> ;
(2) (C++23以降)
namespace pmr {

using stacktrace =
std :: basic_stacktrace < std:: pmr :: polymorphic_allocator < std:: stacktrace_entry >> ;

}
(3) (C++23以降)
1) basic_stacktrace クラステンプレートは、スタックトレース全体またはその一部のスナップショットを表します。これは AllocatorAwareContainer SequenceContainer 、および ReversibleContainer の要件を満たしますが、移動、代入、swap、およびconst修飾されたシーケンスコンテナの操作のみがサポートされ、比較関数のセマンティクスはコンテナに要求されるものとは異なります。
2) デフォルトの std::allocator を使用する basic_stacktrace の利便性タイプエイリアス。
3) polymorphic allocator を使用する basic_stacktrace の利便性タイプエイリアス。

現在の評価 x 0 呼び出しシーケンス は、現在の実行スレッドにおける評価のシーケンス (x 0 , ..., x n ) であり、 i≥0 に対して、 x i は関数呼び出し x i+1 内に存在する。

stacktrace は、呼び出しシーケンスの近似表現であり、スタックトレースエントリで構成されます。

スタックトレースエントリ は、スタックトレース内の評価を表します。C++標準ライブラリでは std::stacktrace_entry によって表現されます。

目次

テンプレートパラメータ

Allocator - メモリの取得/解放およびそのメモリ内の要素の構築/破棄に使用されるアロケータ。この型は Allocator の要件を満たさなければならない。 Allocator::value_type std::stacktrace_entry でない場合、プログラムは不適格である。

メンバー型

メンバ型 定義
value_type std::stacktrace_entry
const_reference const value_type &
reference value_type &
const_iterator 実装定義のconst LegacyRandomAccessIterator をモデルとする型 random_access_iterator
iterator const_iterator
reverse_iterator std:: reverse_iterator < iterator >
reverse_const_iterator std:: reverse_iterator < const_iterator >
difference_type 実装定義の符号付き整数型
size_type 実装定義の符号なし整数型
allocator_type Allocator

メンバー関数

新しい basic_stacktrace を作成する
(public member function)
basic_stacktrace を破棄する
(public member function)
basic_stacktrace に代入する
(public member function)
[static]
現在のスタックトレースまたはその指定部分を取得する
(public static member function)
関連付けられたアロケータを返す
(public member function)
イテレータ
先頭へのイテレータを返す
(public member function)
終端へのイテレータを返す
(public member function)
先頭への逆イテレータを返す
(public member function)
終端への逆イテレータを返す
(public member function)
容量
basic_stacktrace が空かどうかをチェックする
(public member function)
スタックトレースエントリの数を返す
(public member function)
スタックトレースエントリの最大可能数を返す
(public member function)
要素アクセス
指定されたスタックトレースエントリにアクセスする
(public member function)
境界チェック付きで指定されたスタックトレースエントリにアクセスする
(public member function)
変更操作
内容を交換する
(public member function)

非メンバー関数

2つの basic_stacktrace 値のサイズと内容を比較する
(関数テンプレート)
std::swap アルゴリズムを特殊化する
(関数テンプレート)
(C++23)
basic_stacktrace の説明を含む文字列を返す
(関数テンプレート)
(C++23)
basic_stracktrace のストリーム出力を実行する
(関数テンプレート)

ヘルパークラス

std::basic_stacktrace のハッシュサポート
(クラステンプレートの特殊化)
basic_stacktrace のフォーマットサポート
(クラステンプレートの特殊化)

注記

カスタムアロケータのサポートは、ホットパスや組み込み環境で basic_stacktrace を使用するために提供されています。ユーザーは適切な場合に stacktrace_entry オブジェクトをスタック上または他の場所に割り当てることができます。

std::stacktrace_entry オブジェクトのシーケンスは、 std::basic_stacktrace によって所有されており不変です。このシーケンスは空であるか、スタックトレース全体の連続した区間を表します。

boost :: stacktrace :: basic_stacktrace (利用可能: Boost.Stacktrace ) は、 std::basic_stacktrace が利用できない場合に代わりに使用できます。

機能テスト マクロ 標準 機能
__cpp_lib_stacktrace 202011L (C++23) スタックトレース ライブラリ
__cpp_lib_formatters 202302L (C++23) std::thread::id std::stacktrace のフォーマット

Compiler Explorerを使用して得られた出力: msvc および gcc

#include <iostream>
#include <stacktrace>
int nested_func(int c)
{
    std::cout << std::stacktrace::current() << '\n';
    return c + 1;
}
int func(int b)
{
    return nested_func(b + 1);
}
int main()
{
    std::cout << func(777);
}

出力例:

// msvc output (the lines ending with '⤶' arrows are split to fit the width):
0> C:\Users\ContainerAdministrator\AppData\Local\Temp\compiler-explorer-compiler20221122-⤶
31624-2ja1sf.8ytzw\example.cpp(6): output_s!nested_func+0x1F
1> C:\Users\ContainerAdministrator\AppData\Local\Temp\compiler-explorer-compiler20221122-⤶
31624-2ja1sf.8ytzw\example.cpp(12): output_s!func+0x15
2> C:\Users\ContainerAdministrator\AppData\Local\Temp\compiler-explorer-compiler20221122-⤶
31624-2ja1sf.8ytzw\example.cpp(15): output_s!main+0xE
3> D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl(288): output_s!⤶
__scrt_common_main_seh+0x10C
4> KERNEL32!BaseThreadInitThunk+0x14
5> ntdll!RtlUserThreadStart+0x21
779
gcc output:
   0# nested_func(int) at /app/example.cpp:7
   1# func(int) at /app/example.cpp:13
   2#      at /app/example.cpp:18
   3#      at :0
   4#      at :0
   5# 
779

関連項目

スタックトレース内の評価の表現
(クラス)