std::basic_stacktrace
| Definiert in der Header-Datei <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 = |
(3) | (seit C++23) |
basic_stacktrace repräsentiert einen Schnappschuss des gesamten Stacktrace oder eines gegebenen Teils davon. Sie erfüllt die Anforderungen von AllocatorAwareContainer, SequenceContainer und ReversibleContainer, mit der Ausnahme, dass nur Move-, Zuweisungs- und Swap-Operationen sowie Operationen für const-qualifizierte Sequenzcontainer unterstützt werden und die Semantik der Vergleichsfunktionen von der für Container erforderlichen abweicht.Die *Aufrufsequenz* der aktuellen Auswertung x0 im aktuellen Ausführungsthread ist eine Sequenz (x0, ..., xn) von Auswertungen, sodass für i≥0 xi innerhalb des Funktionsaufrufs xi+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 in der C++-Standardbibliothek durch std::stacktrace_entry dargestellt.
Inhalt |
[edit] Template-Parameter
| Allocator | - | Ein Allocator, der zum Erwerben/Freigeben von Speicher und zum Erstellen/Zerstören der Elemente in diesem Speicher verwendet wird. Der Typ muss die Anforderungen von Allocator erfüllen. Das Programm ist ill-formed, wenn Allocator::value_type nicht std::stacktrace_entry ist. |
[edit] Mitgliedertypen
| Mitgliedertyp | Definition |
value_type
|
std::stacktrace_entry |
const_reference
|
const value_type& |
Referenz
|
value_type& |
const_iterator
|
Implementierungsabhängiger 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
|
Implementierungsabhängiger vorzeichenbehafteter Ganzzahltyp |
size_type
|
Implementierungsabhängiger vorzeichenloser Ganzzahltyp |
allocator_type
|
Allocator
|
[edit] Member-Funktionen
erstellt einen neuen basic_stacktrace(public member function) | |
zerstört den basic_stacktrace(public member function) | |
weist einem basic_stacktrace zu(public member function) | |
| [static] |
holt den aktuellen Stacktrace oder dessen gegebenen Teil (public static member function) |
| gibt den zugehörigen Allocator zurück (public member function) | |
Iteratoren | |
| gibt einen Iterator zum Anfang zurück (public member function) | |
| gibt einen Iterator zum Ende zurück (public member function) | |
| gibt einen Reverse-Iterator zum Anfang zurück (public member function) | |
| gibt einen Reverse-Iterator zum Ende zurück (public member function) | |
Kapazität | |
prüft, ob der basic_stacktrace leer ist(public member function) | |
| gibt die Anzahl der Stacktrace-Einträge zurück (public member function) | |
| gibt die maximal mögliche Anzahl von Stacktrace-Einträgen zurück (public member function) | |
Elementzugriff | |
| greift auf einen bestimmten Stacktrace-Eintrag zu (public member function) | |
| greift auf einen bestimmten Stacktrace-Eintrag mit Bereichsprüfung zu (public member function) | |
Modifizierer | |
| tauscht die Inhalte (public member function) | |
[edit] Nicht-Member-Funktionen
| (C++23) |
vergleicht die Größen und Inhalte zweier basic_stacktrace-Werte(function template) |
| spezialisiert den Algorithmus std::swap (function template) | |
| (C++23) |
gibt einen String mit einer Beschreibung des basic_stacktrace zurück(function template) |
| (C++23) |
führt die Stream-Ausgabe von basic_stracktrace durch(function template) |
[edit] Hilfsklassen
| Hash-Unterstützung für std::basic_stacktrace (class template specialization) | |
Formatierungsunterstützung für basic_stacktrace(class template specialization) |
[edit] Anmerkungen
Die Unterstützung für benutzerdefinierte Allocators wird bereitgestellt, um basic_stacktrace auf 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 Sequenz der von einem std::basic_stacktrace gehaltenen std::stacktrace_entry-Objekte ist unveränderlich und entweder leer oder repräsentiert ein zusammenhängendes Intervall des 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 | Feature |
|---|---|---|---|
__cpp_lib_stacktrace |
202011L |
(C++23) | Stacktrace-Bibliothek |
__cpp_lib_formatters |
202302L |
(C++23) | Formatierung von std::thread::id und std::stacktrace |
[edit] Beispiel
Die Ausgabe wurde mit Compiler Explorer erzielt: msvc und gcc.
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
[edit] Siehe auch
| (C++23) |
Repräsentation einer Auswertung in einem Stacktrace (class) |