Namensräume
Varianten
Aktionen

std::basic_stacktrace

Von cppreference.com
< cpp‎ | utility
 
 
 
 
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 =
    std::basic_stacktrace<std::pmr::polymorphic_allocator<std::stacktrace_entry>>;

}
(3) (seit C++23)
1) Die Klasse 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.
2) Bequeme Typalias für basic_stacktrace unter Verwendung des Standard-std::allocator.
3) Bequeme Typalias für basic_stacktrace unter Verwendung des polymorphen Allocator.

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) [edit]
zerstört den basic_stacktrace
(public member function) [edit]
weist einem basic_stacktrace zu
(public member function) [edit]
[static]
holt den aktuellen Stacktrace oder dessen gegebenen Teil
(public static member function) [edit]
gibt den zugehörigen Allocator zurück
(public member function) [edit]
Iteratoren
gibt einen Iterator zum Anfang zurück
(public member function) [edit]
gibt einen Iterator zum Ende zurück
(public member function) [edit]
gibt einen Reverse-Iterator zum Anfang zurück
(public member function) [edit]
gibt einen Reverse-Iterator zum Ende zurück
(public member function) [edit]
Kapazität
prüft, ob der basic_stacktrace leer ist
(public member function) [edit]
gibt die Anzahl der Stacktrace-Einträge zurück
(public member function) [edit]
gibt die maximal mögliche Anzahl von Stacktrace-Einträgen zurück
(public member function) [edit]
Elementzugriff
greift auf einen bestimmten Stacktrace-Eintrag zu
(public member function) [edit]
greift auf einen bestimmten Stacktrace-Eintrag mit Bereichsprüfung zu
(public member function) [edit]
Modifizierer
tauscht die Inhalte
(public member function) [edit]

[edit] Nicht-Member-Funktionen

vergleicht die Größen und Inhalte zweier basic_stacktrace-Werte
(function template)
spezialisiert den Algorithmus std::swap
(function template) [edit]
(C++23)
gibt einen String mit einer Beschreibung des basic_stacktrace zurück
(function template) [edit]
führt die Stream-Ausgabe von basic_stracktrace durch
(function template) [edit]

[edit] Hilfsklassen

Hash-Unterstützung für std::basic_stacktrace
(class template specialization) [edit]
Formatierungsunterstützung für basic_stacktrace
(class template specialization) [edit]

[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.

#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

[edit] Siehe auch

Repräsentation einer Auswertung in einem Stacktrace
(class) [bearbeiten]