= C++教科書/標準ライブラリ編/<stacktrace>の章

C++ 標準ライブラリ ヘッダー <stacktrace> 解説

編集

19.6 スタックトレース

編集

この節では、C++ プログラムが現在のスレッドの実行のスタックトレースを格納し、実行時に格納されたスタックトレースに関する情報を照会するために使用できるコンポーネントについて説明します。

  • 19.6.1 一般 このサブ節では、スタックトレースの概念と、C++ 標準ライブラリが提供するスタックトレース関連機能の概要を説明します。
    • スタックトレース は、プログラム実行時の関数呼び出し履歴を記録したものです。デバッグやエラー処理において、問題発生箇所を特定するために役立ちます。
    • C++ 標準ライブラリは、stacktrace_entry クラスと basic_stacktrace クラステンプレートを提供し、スタックトレースの取得、操作、比較などを可能にします。
  • 19.6.2 ヘッダー <stacktrace> シノプシス このサブ節では、ヘッダー <stacktrace> に含まれる関数と型宣言を一覧します。
    • stacktrace_entry クラス は、スタックトレースエントリを表します。スタックトレースエントリは、関数呼び出しに関する情報を格納します。
    • basic_stacktrace クラステンプレート は、スタックトレースを表します。スタックトレースは、複数のスタックトレースエントリで構成されます。
    • ヘッダー <stacktrace> には、スタックトレースの取得、操作、比較、フォーマット化、ハッシュ化のための関数と型宣言が含まれています。
  • 19.6.3 クラス stacktrace_entry このサブ節では、stacktrace_entry クラスのメンバー関数を説明します。
    • コンストラクタ
      • stacktrace_entry():空のスタックトレースエントリを作成します。
      • stacktrace_entry(const stacktrace_entry& other):別のスタックトレースエントリをコピーして新しいスタックトレースエントリを作成します。
      • ~stacktrace_entry():スタックトレースエントリのデストラクタです。
    • オブザーバ
      • native_handle():スタックトレースエントリのネイティブハンドルを取得します。
      • operator bool():スタックトレースエントリが空かどうかを判定します。
    • 照会
      • description():スタックトレースエントリの説明を取得します。
      • source_file():スタックトレースエントリのソースファイル名を取得します。
      • source_line():スタックトレースエントリのソースコード行番号を取得します。
    • 比較
      • operator==:2 つのスタックトレースエントリが等しいかどうかを判定します。
      • operator<=>:2 つのスタックトレースエントリを比較します。
  • 19.6.4 クラステンプレート basic_stacktrace このサブ節では、basic_stacktrace クラステンプレートのメンバー関数を説明します。
    • コンストラクタ
      • basic_stacktrace():空のスタックトレースを作成します。
      • basic_stacktrace(const allocator_type& alloc):指定されたアロケータを使用して空のスタックトレースを作成します。
      • basic_stacktrace(const basic_stacktrace& other):別のスタックトレースをコピーして新しいスタックトレースを作成します。
      • basic_stacktrace(basic_stacktrace&& other):別のスタックトレースを移動して新しいスタックトレースを作成します。
      • basic_stacktrace(const basic_stacktrace& other, const allocator_type& alloc):別のスタックトレースをコピーして新しいスタックトレースを作成し、アロケータを指定します。
      • basic_stacktrace(basic_stacktrace&& other, const allocator_type& alloc):別のスタックトレースを移動して新しいスタックトレースを作成し、アロケータを指定します。
    • 代入演算子
      • operator=:別のスタックトレースをコピーして代入します。
      • operator=:別のスタックトレースを移動して代入します。
    • デストラクタ
      • ~basic_stacktrace():スタックトレースのデストラクタ。
    • オブザーバ
      • get_allocator():スタックトレースで使用されているアロケータを取得します。
      • begin():スタックトレースの先頭イテレータを取得します。
      • cbegin():const スタックトレースの先頭イテレータを取得します。
      • end():スタックトレースの終端イテレータを取得します。
      • cend():const スタックトレースの終端イテレータを取得します。
      • rbegin():スタックトレースの逆イテレータの先頭を取得します。
      • crbegin():const スタックトレースの逆イテレータの先頭を取得します。
      • rend():スタックトレースの逆イテレータの終端を取得します。
      • crend():const スタックトレースの逆イテレータの終端を取得します。
      • empty():スタックトレースが空かどうかを判定します。
      • size():スタックトレースに含まれるスタックトレースエントリの数を取得します。
      • max_size():スタックトレースが最大で格納できるスタックトレースエントリの数を取得します。
      • operator[]:指定されたインデックスのスタックトレースエントリを取得します。
      • at():指定されたインデックスのスタックトレースエントリを取得します。
    • 比較
      • operator==:2 つのスタックトレースが等しいかどうかを判定します。
      • operator<=>:2 つのスタックトレースを比較します。
    • 修飾子
      • swap():別のスタックトレースと内容を交換します。
  • 19.6.4.6 非メンバ関数 このサブ節では、ヘッダー <stacktrace> に含まれる非メンバ関数を説明します。
    • swap():2 つの basic_stacktrace オブジェクトの内容を交換します。
    • to_string()stacktrace_entry オブジェクトまたは basic_stacktrace オブジェクトを文字列に変換します。
    • operator<<stacktrace_entry オブジェクトまたは basic_stacktrace オブジェクトをストリームに出力します。
  • 19.6.4.7 フォーマットサポート このサブ節では、stacktrace_entry オブジェクトと basic_stacktrace オブジェクトのフォーマット化をサポートするための型テンプレートを説明します。
    • formatter<stacktrace_entry>stacktrace_entry オブジェクトのフォーマット化をサポートします。
    • formatter<basic_stacktrace>basic_stacktrace オブジェクトのフォーマット化をサポートします。
  • 19.6.4.8 ハッシュサポート このサブ節では、stacktrace_entry オブジェクトと basic_stacktrace オブジェクトのハッシュ化をサポートするための型テンプレートを説明します。
    • hash<stacktrace_entry>stacktrace_entry オブジェクトのハッシュ値を計算します。
    • hash<basic_stacktrace>basic_stacktrace オブジェクトのハッシュ値を計算します。

注意事項

編集
  • この解説は、C++ 標準ライブラリ ヘッダー <stacktrace> の概要を説明したものです。詳細については、C++ 標準ライブラリの公式ドキュメントを参照してください。
  • C++ 標準ライブラリ <stacktrace> は C++20 以降で使用できます。