std:: basic_stacktrace
|
Определено в заголовочном файле
<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
=
|
(3) | (начиная с C++23) |
basic_stacktrace
представляет снимок всей трассировки стека или её заданной части. Он удовлетворяет требованиям
AllocatorAwareContainer
,
SequenceContainer
и
ReversibleContainer
, за исключением того, что поддерживаются только перемещение, присваивание, обмен и операции для константно-квалифицированных контейнеров-последовательностей, а семантика функций сравнения отличается от требуемой для контейнера.
Последовательность вызовов текущего вычисления 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) |
|
Функции, не являющиеся членами класса
|
(C++23)
|
сравнивает размеры и содержимое двух значений
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 .
Возможный вывод:
// 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
Смотрите также
|
(C++23)
|
представление вычисления в трассировке стека
(класс) |