Namespaces
Variants

std:: basic_stacktrace

From cppreference.net
Definiert im Header <stacktrace>
template < class Allocator >
class basic_stacktrace ;
(1) (seit C++23)
using stacktrace =
std :: basic_stacktrace < std:: allocator < std:: stacktrace_entry >> ;
(2) (seit C++23)
namespace pmr {

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

}
(3) (seit C++23)
1) Die basic_stacktrace -Klassenvorlage repräsentiert eine Momentaufnahme der gesamten Stacktrace oder eines bestimmten Teils davon. Sie erfüllt die Anforderungen von AllocatorAwareContainer , SequenceContainer , und ReversibleContainer , mit der Ausnahme, dass nur Move-Operationen, Zuweisungen, Swap und Operationen für const-qualifizierte Sequenzcontainer unterstützt werden, und die Semantik der Vergleichsfunktionen sich von denen unterscheidet, die für einen Container erforderlich sind.
2) Bequeme Typ-Alias für die basic_stacktrace unter Verwendung des Standard- std::allocator .
3) Bequemlichkeitstyp-Alias für die basic_stacktrace unter Verwendung des polymorphic allocator .

Die Aufrufsequenz der aktuellen Auswertung x 0 im aktuellen Ausführungsstrang ist eine Sequenz (x 0 , ..., x n ) von Auswertungen, sodass für i≥0 , x i innerhalb des Funktionsaufrufs x i+1 liegt.

Ein Stacktrace ist eine ungefähre Darstellung einer Aufrufsequenz und besteht aus Stacktrace-Einträgen.

Ein Stacktrace-Eintrag repräsentiert eine Auswertung in einem Stacktrace. Er wird durch std::stacktrace_entry in der C++-Standardbibliothek dargestellt.

Inhaltsverzeichnis

Template-Parameter

Allocator - Ein Allokator, der verwendet wird, um Speicher zu beschaffen/freizugeben und Elemente in diesem Speicher zu konstruieren/destruieren. Der Typ muss die Anforderungen von Allocator erfüllen. Das Programm ist fehlerhaft, wenn Allocator::value_type nicht std::stacktrace_entry ist.

Mitgliedertypen

Mitgliedertyp Definition
value_type std::stacktrace_entry
const_reference const value_type &
reference value_type &
const_iterator implementierungsdefinierter const LegacyRandomAccessIterator -Typ, der random_access_iterator modelliert
iterator const_iterator
reverse_iterator std:: reverse_iterator < iterator >
reverse_const_iterator std:: reverse_iterator < const_iterator >
difference_type implementierungsdefinierter Ganzzahltyp mit Vorzeichen
size_type implementierungsdefinierter Ganzzahltyp ohne Vorzeichen
allocator_type Allocator

Memberfunktionen

erstellt einen neuen basic_stacktrace
(Öffentliche Mitgliedsfunktion)
zerstört den basic_stacktrace
(Öffentliche Mitgliedsfunktion)
weist dem basic_stacktrace zu
(Öffentliche Mitgliedsfunktion)
[static]
ermittelt die aktuelle Stacktrace oder ihren angegebenen Teil
(Öffentliche statische Mitgliedsfunktion)
gibt den zugehörigen Allokator zurück
(Öffentliche Mitgliedsfunktion)
Iteratoren
gibt einen Iterator zum Anfang zurück
(Öffentliche Mitgliedsfunktion)
gibt einen Iterator zum Ende zurück
(Öffentliche Mitgliedsfunktion)
gibt einen umgekehrten Iterator zum Anfang zurück
(Öffentliche Mitgliedsfunktion)
gibt einen umgekehrten Iterator zum Ende zurück
(Öffentliche Mitgliedsfunktion)
Kapazität
prüft, ob der basic_stacktrace leer ist
(Öffentliche Mitgliedsfunktion)
gibt die Anzahl der Stacktrace-Einträge zurück
(Öffentliche Mitgliedsfunktion)
gibt die maximal mögliche Anzahl von Stacktrace-Einträgen zurück
(Öffentliche Mitgliedsfunktion)
Elementzugriff
greift auf den angegebenen Stacktrace-Eintrag zu
(Öffentliche Mitgliedsfunktion)
greift auf den angegebenen Stacktrace-Eintrag mit Grenzprüfung zu
(Öffentliche Mitgliedsfunktion)
Modifikatoren
tauscht die Inhalte aus
(Öffentliche Mitgliedsfunktion)

Nicht-Member-Funktionen

vergleicht die Größen und Inhalte zweier basic_stacktrace -Werte
(Funktions-Template)
spezialisiert den std::swap -Algorithmus
(Funktions-Template)
(C++23)
gibt eine Zeichenkette mit einer Beschreibung der basic_stacktrace zurück
(Funktions-Template)
(C++23)
führt Stream-Ausgabe für basic_stracktrace durch
(Funktions-Template)

Hilfsklassen

Hash-Unterstützung für std::basic_stacktrace
(Klassen-Template-Spezialisierung)
Formatierungsunterstützung für basic_stacktrace
(Klassen-Template-Spezialisierung)

Hinweise

Die Unterstützung für benutzerdefinierte Allokatoren wird bereitgestellt, um basic_stacktrace in einem Hot Path oder in eingebetteten Umgebungen zu verwenden. Benutzer können stacktrace_entry Objekte auf dem Stack oder an einem anderen geeigneten Ort allozieren.

Die Abfolge der std::stacktrace_entry -Objekte, die von einem std::basic_stacktrace besessen werden, ist unveränderlich und entweder leer oder repräsentiert ein zusammenhängendes Intervall der gesamten Stacktrace.

boost :: stacktrace :: basic_stacktrace (verfügbar in Boost.Stacktrace ) kann stattdessen verwendet werden, wenn std::basic_stacktrace nicht verfügbar ist.

Feature-Test Makro Wert Std Funktion
__cpp_lib_stacktrace 202011L (C++23) Stacktrace Bibliothek
__cpp_lib_formatters 202302L (C++23) Formatierung von std::thread::id und std::stacktrace

Beispiel

Die mit Compiler Explorer erhaltene Ausgabe: msvc und 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);
}

Mögliche Ausgabe:

// 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

Siehe auch

Darstellung einer Auswertung in einer Stacktrace
(Klasse)