Namespaces
Variants

std:: basic_stacktrace

From cppreference.net
Défini dans l'en-tête <stacktrace>
template < class Allocator >
class basic_stacktrace ;
(1) (depuis C++23)
using stacktrace =
std :: basic_stacktrace < std:: allocator < std:: stacktrace_entry >> ;
(2) (depuis C++23)
namespace pmr {

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

}
(3) (depuis C++23)
1) Le modèle de classe basic_stacktrace représente un instantané de la pile d'appels complète ou d'une partie donnée de celle-ci. Il satisfait aux exigences de AllocatorAwareContainer , SequenceContainer , et ReversibleContainer , à l'exception que seuls le déplacement, l'affectation, l'échange et les opérations pour les conteneurs séquentiels qualifiés const sont pris en charge, et la sémantique des fonctions de comparaison est différente de celle requise pour un conteneur.
2) Alias de type pratique pour la basic_stacktrace utilisant l'allocateur par défaut std::allocator .
3) Alias de type pratique pour la basic_stacktrace utilisant l' allocateur polymorphe .

La séquence d'invocation de l'évaluation courante x 0 dans le thread d'exécution courant est une séquence (x 0 , ..., x n ) d'évaluations telle que, pour i≥0 , x i se trouve dans l'invocation de fonction x i+1 .

Une stacktrace est une représentation approximative d'une séquence d'invocation et se compose d'entrées de stacktrace.

Une entrée de pile d'appels représente une évaluation dans une pile d'appels. Elle est représentée par std::stacktrace_entry dans la bibliothèque standard C++.

Table des matières

Paramètres du modèle

Allocator - Un allocateur utilisé pour acquérir/libérer la mémoire et pour construire/détruire les éléments dans cette mémoire. Le type doit satisfaire aux exigences de Allocator . Le programme est mal formé si Allocator::value_type n'est pas std::stacktrace_entry .

Types membres

Type de membre Définition
value_type std::stacktrace_entry
const_reference const value_type &
reference value_type &
const_iterator type const défini par l'implémentation qui modélise LegacyRandomAccessIterator et qui est un random_access_iterator
iterator const_iterator
reverse_iterator std:: reverse_iterator < iterator >
reverse_const_iterator std:: reverse_iterator < const_iterator >
difference_type type entier signé défini par l'implémentation
size_type type entier non signé défini par l'implémentation
allocator_type Allocator

Fonctions membres

crée un nouveau basic_stacktrace
(fonction membre publique)
détruit le basic_stacktrace
(fonction membre publique)
assigne au basic_stacktrace
(fonction membre publique)
[static]
obtient la stacktrace actuelle ou sa partie spécifiée
(fonction membre statique publique)
retourne l'allocateur associé
(fonction membre publique)
Itérateurs
retourne un itérateur vers le début
(fonction membre publique)
retourne un itérateur vers la fin
(fonction membre publique)
retourne un itérateur inverse vers le début
(fonction membre publique)
retourne un itérateur inverse vers la fin
(fonction membre publique)
Capacité
vérifie si le basic_stacktrace est vide
(fonction membre publique)
retourne le nombre d'entrées de la stacktrace
(fonction membre publique)
retourne le nombre maximum possible d'entrées de stacktrace
(fonction membre publique)
Accès aux éléments
accède à l'entrée de stacktrace spécifiée
(fonction membre publique)
accède à l'entrée de stacktrace spécifiée avec vérification des limites
(fonction membre publique)
Modificateurs
échange le contenu
(fonction membre publique)

Fonctions non membres

compare les tailles et le contenu de deux basic_stacktrace
(modèle de fonction)
spécialise l'algorithme std::swap
(modèle de fonction)
(C++23)
retourne une chaîne avec une description du basic_stacktrace
(modèle de fonction)
(C++23)
effectue la sortie en flux du basic_stracktrace
(modèle de fonction)

Classes d'assistance

Support de hachage pour std::basic_stacktrace
(spécialisation de modèle de classe)
Support de formatage pour basic_stacktrace
(spécialisation de modèle de classe)

Notes

La prise en charge des allocateurs personnalisés est fournie pour utiliser basic_stacktrace sur un chemin critique ou dans des environnements embarqués. Les utilisateurs peuvent allouer les objets stacktrace_entry sur la pile ou à un autre endroit approprié.

La séquence d'objets std::stacktrace_entry détenue par un std::basic_stacktrace est immuable, et soit elle est vide, soit elle représente un intervalle contigu de la pile d'appels complète.

boost :: stacktrace :: basic_stacktrace (disponible dans Boost.Stacktrace ) peut être utilisé à la place lorsque std::basic_stacktrace n'est pas disponible.

Macro de test de fonctionnalité Valeur Std Fonctionnalité
__cpp_lib_stacktrace 202011L (C++23) Bibliothèque Stacktrace
__cpp_lib_formatters 202302L (C++23) Formatage de std::thread::id et std::stacktrace

Exemple

Le résultat obtenu en utilisant Compiler Explorer : msvc et 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);
}

Résultat possible :

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

Voir aussi

représentation d'une évaluation dans une stacktrace
(classe)