Namespaces
Variants

std:: basic_stacktrace

From cppreference.net
Definido en el encabezado <stacktrace>
template < class Allocator >
class basic_stacktrace ;
(1) (desde C++23)
using stacktrace =
std :: basic_stacktrace < std:: allocator < std:: stacktrace_entry >> ;
(2) (desde C++23)
namespace pmr {

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

}
(3) (desde C++23)
1) La plantilla de clase basic_stacktrace representa una instantánea de todo el seguimiento de pila o de una parte específica del mismo. Satisface los requisitos de AllocatorAwareContainer , SequenceContainer , y ReversibleContainer , excepto que solo se admiten operaciones de movimiento, asignación, intercambio y operaciones para contenedores de secuencia calificados como constantes, y la semántica de las funciones de comparación es diferente de la requerida para un contenedor.
2) Alias de tipo de conveniencia para el basic_stacktrace que utiliza el std::allocator predeterminado.
3) Alias de tipo de conveniencia para el basic_stacktrace que utiliza el polymorphic allocator .

La secuencia de invocación de la evaluación actual x 0 en el hilo de ejecución actual es una secuencia (x 0 , ..., x n ) de evaluaciones tal que, para i≥0 , x i está dentro de la invocación de función x i+1 .

Un stacktrace es una representación aproximada de una secuencia de invocación y consiste en entradas de stacktrace.

Una entrada de stacktrace representa una evaluación en un stacktrace. Está representada por std::stacktrace_entry en la biblioteca estándar de C++.

Contenidos

Parámetros de plantilla

Allocator - Un asignador que se utiliza para adquirir/liberar memoria y para construir/destruir los elementos en esa memoria. El tipo debe cumplir con los requisitos de Allocator . El programa está mal formado si Allocator::value_type no es std::stacktrace_entry .

Tipos de miembros

Tipo de miembro Definición
value_type std::stacktrace_entry
const_reference const value_type &
reference value_type &
const_iterator tipo const definido por la implementación que modela LegacyRandomAccessIterator random_access_iterator
iterator const_iterator
reverse_iterator std:: reverse_iterator < iterator >
reverse_const_iterator std:: reverse_iterator < const_iterator >
difference_type tipo entero con signo definido por la implementación
size_type tipo entero sin signo definido por la implementación
allocator_type Allocator

Funciones miembro

crea un nuevo basic_stacktrace
(función de miembro pública)
destruye el basic_stacktrace
(función de miembro pública)
asigna al basic_stacktrace
(función de miembro pública)
[static]
obtiene el stacktrace actual o su parte especificada
(función de miembro estática pública)
devuelve el asignador asociado
(función de miembro pública)
Iteradores
devuelve un iterador al inicio
(función de miembro pública)
devuelve un iterador al final
(función de miembro pública)
devuelve un iterador inverso al inicio
(función de miembro pública)
devuelve un iterador inverso al final
(función de miembro pública)
Capacidad
verifica si el basic_stacktrace está vacío
(función de miembro pública)
devuelve el número de entradas del stacktrace
(función de miembro pública)
devuelve el número máximo posible de entradas del stacktrace
(función de miembro pública)
Acceso a elementos
accede a la entrada especificada del stacktrace
(función de miembro pública)
accede a la entrada especificada del stacktrace con verificación de límites
(función de miembro pública)
Modificadores
intercambia los contenidos
(función de miembro pública)

Funciones no miembro

compara los tamaños y contenidos de dos valores basic_stacktrace
(plantilla de función)
especializa el algoritmo std::swap
(plantilla de función)
(C++23)
devuelve una cadena con la descripción del basic_stacktrace
(plantilla de función)
(C++23)
realiza salida por flujo del basic_stracktrace
(plantilla de función)

Clases auxiliares

soporte de hash para std::basic_stacktrace
(especialización de plantilla de clase)
soporte de formato para basic_stacktrace
(especialización de plantilla de clase)

Notas

Se proporciona soporte para asignadores personalizados para usar basic_stacktrace en una ruta crítica o en entornos embebidos. Los usuarios pueden asignar stacktrace_entry objetos en el stack o en cualquier otro lugar, donde sea apropiado.

La secuencia de objetos std::stacktrace_entry propiedad de un std::basic_stacktrace es inmutable, y o bien está vacía o representa un intervalo contiguo del stacktrace completo.

boost :: stacktrace :: basic_stacktrace (disponible en Boost.Stacktrace ) puede utilizarse en lugar de std::basic_stacktrace cuando no esté disponible.

Macro de prueba de características Valor Estándar Característica
__cpp_lib_stacktrace 202011L (C++23) Biblioteca Stacktrace
__cpp_lib_formatters 202302L (C++23) Formateo de std::thread::id y std::stacktrace

Ejemplo

La salida obtenida usando Compiler Explorer: msvc y 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);
}

Salida posible:

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

Véase también

representación de una evaluación en un seguimiento de pila
(clase)