Namespaces
Variants

std:: basic_stacktrace

From cppreference.net
Определено в заголовочном файле <stacktrace>
template < class Allocator >
class basic_stacktrace ;
(1) (начиная с C++23)
using stacktrace =
std :: basic_stacktrace < std:: allocator < std:: stacktrace_entry >> ;
(2) (начиная с C++23)
namespace pmr {

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

}
(3) (начиная с C++23)
1) Шаблон класса basic_stacktrace представляет снимок всей трассировки стека или её заданной части. Он удовлетворяет требованиям AllocatorAwareContainer , SequenceContainer и ReversibleContainer , за исключением того, что поддерживаются только перемещение, присваивание, обмен и операции для константно-квалифицированных контейнеров-последовательностей, а семантика функций сравнения отличается от требуемой для контейнера.
2) Удобный псевдоним типа для basic_stacktrace с использованием стандартного std::allocator .
3) Удобный псевдоним типа для basic_stacktrace с использованием полиморфного аллокатора .

Последовательность вызовов текущего вычисления x 0 в текущем потоке выполнения представляет собой последовательность (x 0 , ..., x n ) вычислений, такую что для i≥0 , x i находится внутри вызова функции x i+1 .

stacktrace — это приблизительное представление последовательности вызовов и состоит из записей stacktrace.

Запись трассировки стека представляет вычисление в трассировке стека. Она представлена как std::stacktrace_entry в стандартной библиотеке C++.

Содержание

Параметры шаблона

Allocator - Аллокатор, который используется для выделения/освобождения памяти и для создания/уничтожения элементов в этой памяти. Тип должен соответствовать требованиям Allocator . Программа является некорректной, если Allocator::value_type не является std::stacktrace_entry .

Типы членов

Тип члена Определение
value_type std::stacktrace_entry
const_reference const value_type &
reference value_type &
const_iterator определяемый реализацией константный LegacyRandomAccessIterator тип, моделирующий random_access_iterator
iterator const_iterator
reverse_iterator std:: reverse_iterator < iterator >
reverse_const_iterator std:: reverse_iterator < const_iterator >
difference_type определяемый реализацией знаковый целочисленный тип
size_type определяемый реализацией беззнаковый целочисленный тип
allocator_type Allocator

Функции-члены

создает новый basic_stacktrace
(public member function)
уничтожает basic_stacktrace
(public member function)
присваивает значение basic_stacktrace
(public member function)
[static]
получает текущий стек вызовов или его заданную часть
(public static member function)
возвращает связанный аллокатор
(public member function)
Итераторы
возвращает итератор на начало
(public member function)
возвращает итератор на конец
(public member function)
возвращает обратный итератор на начало
(public member function)
возвращает обратный итератор на конец
(public member function)
Емкость
проверяет, является ли basic_stacktrace пустым
(public member function)
возвращает количество записей в стеке вызовов
(public member function)
возвращает максимально возможное количество записей в стеке вызовов
(public member function)
Доступ к элементам
доступ к указанной записи стека вызовов
(public member function)
доступ к указанной записи стека вызовов с проверкой границ
(public member function)
Модификаторы
обменивает содержимое
(public member function)

Функции, не являющиеся членами класса

сравнивает размеры и содержимое двух значений basic_stacktrace
(шаблон функции)
специализирует алгоритм std::swap
(шаблон функции)
(C++23)
возвращает строку с описанием basic_stacktrace
(шаблон функции)
(C++23)
выполняет потоковый вывод basic_stracktrace
(шаблон функции)

Вспомогательные классы

поддержка хеширования для std::basic_stacktrace
(специализация шаблона класса)
поддержка форматирования для basic_stacktrace
(специализация шаблона класса)

Примечания

Поддержка пользовательских аллокаторов предоставляется для использования basic_stacktrace в критических участках кода или во встроенных средах. Пользователи могут размещать stacktrace_entry объекты в стеке или в другом подходящем месте.

Последовательность объектов std::stacktrace_entry , принадлежащих std::basic_stacktrace , является неизменяемой и либо пуста, либо представляет собой непрерывный интервал всей трассировки стека.

boost :: stacktrace :: basic_stacktrace (доступен в Boost.Stacktrace ) может быть использован вместо std::basic_stacktrace когда он недоступен.

Макрос тестирования возможностей Значение Стандарт Функция
__cpp_lib_stacktrace 202011L (C++23) Библиотека трассировки стека
__cpp_lib_formatters 202302L (C++23) Форматирование std::thread::id и std::stacktrace

Пример

Результат, полученный с использованием Compiler Explorer: msvc и 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);
}

Возможный вывод:

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

Смотрите также

представление вычисления в трассировке стека
(класс)