std::basic_stacktrace(3) | C++ Standard Libary | std::basic_stacktrace(3) |
NAME¶
std::basic_stacktrace - std::basic_stacktrace
Synopsis¶
Defined in header <stacktrace>
template< class Allocator > (1) (since
class basic_stacktrace; C++23)
using stacktrace = (2) (since
std::basic_stacktrace<std::allocator<std::stacktrace_entry>>;
C++23)
namespace pmr {
using stacktrace = (since
(3) C++23)
std::basic_stacktrace<std::pmr::polymorphic_allocator<std::stacktrace_entry>>;
}
1) The basic_stacktrace class template represents a snapshot of the whole
stacktrace
or its given part. It satisfies the requirement of AllocatorAwareContainer,
SequenceContainer, and ReversibleContainer, except that only move,
assignment, swap,
and operations for const-qualified sequence containers are supported, and the
semantics of comparison functions are different from those required for a
container.
2) Convenience type alias for the basic_stacktrace using the default
std::allocator.
3) Convenience type alias for the basic_stacktrace using the polymorphic
allocator.
The invocation sequence of the current evaluation \(\small{ {x}_{0} }\)x[0]
in the
current thread of execution is a sequence \(\small{ ({x}_{0}, \dots,
{x}_{n})}\)(x[0], ..., x[n]) of evaluations such that, for \(\small{i \ge
0}\)i≥0,
\(\small{ {x}_{i} }\)x[i] is within the function invocation \(\small{
{x}_{i+1}
}\)x[i+1].
A stacktrace is an approximate representation of an invocation sequence and
consists
of stacktrace entries.
A stacktrace entry represents an evaluation in a stacktrace. It is
represented by
std::stacktrace_entry in the C++ standard library.
Template parameters¶
An allocator that is used to acquire/release memory and to
Allocator - construct/destroy the elements in that memory. The type must meet
the
requirements of Allocator. The program is ill-formed if
Allocator::value_type is not std::stacktrace_entry.
Member types¶
Member type Definition
value_type std::stacktrace_entry
const_reference const value_type&
reference value_type&
const_iterator implementation-defined const LegacyRandomAccessIterator type
that models random_access_iterator
iterator const_iterator
reverse_iterator std::reverse_iterator<iterator>
reverse_const_iterator std::reverse_iterator<const_iterator>
difference_type implementation-defined signed integer type
size_type implementation-defined unsigned integer type
allocator_type Allocator
Member functions¶
constructor creates a new basic_stacktrace
(public member function)
destructor destroys the basic_stacktrace
(public member function)
operator= assigns to the basic_stacktrace
(public member function)
current obtains the current stacktrace or its given part
[static] (public static member function)
get_allocator returns the associated allocator
(public member function)
Iterators¶
begin returns an iterator to the beginning
cbegin (public member function)
end returns an iterator to the end
cend (public member function)
rbegin returns a reverse iterator to the beginning
crbegin (public member function)
rend returns a reverse iterator to the end
crend (public member function)
Capacity¶
empty checks whether the basic_stacktrace is empty
(public member function)
size returns the number of stacktrace entries
(public member function)
max_size returns the maximum possible number of stacktrace entries
(public member function)
Element access¶
operator[] access specified stacktrace entry
(public member function)
at access specified stacktrace entry with bounds checking
(public member function)
Modifiers¶
swap swaps the contents
(public member function)
Non-member functions¶
operator== compares the sizes and the contents of two
operator<=> basic_stacktrace values
(C++23) (function template)
std::swap(std::basic_stacktrace) specializes the std::swap algorithm
(C++23) (function template)
to_string returns a string with a description of the
(C++23) basic_stacktrace
(function template)
operator<< performs stream output of basic_stracktrace
(C++23) (function template)
Helper classes¶
std::hash<std::basic_stacktrace> hash support for
std::basic_stacktrace
(C++23) (class template specialization)
std::formatter<std::basic_stacktrace> formatting support for
basic_stacktrace
(C++23) (class template specialization)
Notes¶
Support for custom allocators is provided for using
basic_stacktrace on a hot path
or in embedded environments. Users can allocate stacktrace_entry objects on
the
stack or in some other place, where appropriate.
The sequence of std::stacktrace_entry objects owned by a
std::basic_stacktrace is
immutable, and either is empty or represents a contiguous interval of the
whole
stacktrace.
boost::stacktrace::basic_stacktrace (available in Boost.Stacktrace) can be
used
instead when std::basic_stacktrace is not available.
Feature-test macro Value Std Feature
__cpp_lib_stacktrace 202011L (C++23) Stacktrace library
__cpp_lib_formatters 202302L (C++23) Formatting std::thread::id and
std::stacktrace
Example¶
The output obtained using Compiler Explorer: msvc and gcc.
// Run this code
#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);
}
Possible output:¶
// 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
See also¶
stacktrace_entry representation of an evaluation in a stacktrace
(C++23) (class)
2024.06.10 | http://cppreference.com |