Namespaces
Variants
Views
Actions

std::basic_stacktrace

From cppreference.com
< cpp‎ | utility
Revision as of 08:02, 22 December 2022 by Emiya173 (Talk | contribs)

 
 
 
 
Defined in header <stacktrace>
template< class Allocator >
class basic_stacktrace;
(1) (since C++23)
using stacktrace =
    std::basic_stacktrace<std::allocator<std::stacktrace_entry>>;
(2) (since C++23)
namespace pmr {

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

}
(3) (since C++23)
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 x0 in the current thread of execution is a sequence (x0, ..., xn) of evaluations such that, for i≥0, xi is within the function invocation xi+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.

Contents

Template parameters

Allocator - An allocator that is used to acquire/release memory and to 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(C++23) std::stacktrace_entry
const_reference(C++23) const value_type&
reference(C++23) value_type&
const_iterator(C++23) implementation-defined const LegacyRandomAccessIterator type that models random_access_iterator
iterator(C++23) const_iterator
reverse_iterator(C++23) std::reverse_iterator<iterator>
reverse_const_iterator(C++23) std::reverse_iterator<const_iterator>
difference_type(C++23) implementation-defined signed integer type
size_type(C++23) implementation-defined unsigned integer type
allocator_type(C++23) Allocator

Member functions

creates a new basic_stacktrace
(public member function) [edit]
destroys the basic_stacktrace
(public member function)
assigns to the basic_stacktrace
(public member function) [edit]
[static]
obtains the current stacktrace or its given part
(public static member function) [edit]
returns the associated allocator
(public member function)
Iterators
returns an iterator to the beginning
(public member function) [edit]
returns an iterator to the end
(public member function) [edit]
returns a reverse iterator to the beginning
(public member function) [edit]
returns a reverse iterator to the end
(public member function) [edit]
Capacity
checks whether the basic_stacktrace is empty
(public member function) [edit]
returns the number of stacktrace entries
(public member function) [edit]
returns the maximum possible number of stacktrace entries
(public member function) [edit]
Element access
access specified stacktrace entry
(public member function) [edit]
access specified stacktrace entry with bounds checking
(public member function) [edit]
Modifiers
swaps the contents
(public member function) [edit]

Non-member functions

compares the sizes and the contents of two basic_stacktrace values
(function template)
specializes the std::swap algorithm
(function template) [edit]
(C++23)
returns a string with a description of the basic_stacktrace
(function template) [edit]
performs stream output of basic_stracktrace
(function template) [edit]

Helper classes

hash support for std::basic_stacktrace
(class template specialization) [edit]

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)

Example

import std;
using namespace std;
 
int func(int b) {
    stacktrace bs = stacktrace::current();
    cout << bs << endl;
    return b;
}
 
int main() {
#ifdef _DEBUG
    cout << "DEBUG:\n";
#else
    cout << "RELEASE\n";
#endif // DEBUG
 
    stacktrace bs = stacktrace::current();
    cout << bs << endl;
    cout << func(777);
}

Output:

RELEASE
0> F:\Source\Repos\Project1\main.cpp(17): Project1!main+0x36
1> D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl(288): Project1!__scrt_common_main_seh+0x10C
2> KERNEL32!BaseThreadInitThunk+0x1D
3> ntdll!RtlUserThreadStart+0x28
0> F:\Source\Repos\Project1\main.cpp(19): Project1!main+0x6F
1> D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl(288): Project1!__scrt_common_main_seh+0x10C
2> KERNEL32!BaseThreadInitThunk+0x1D
3> ntdll!RtlUserThreadStart+0x28
777
 
or
 
DEBUG:
0> F:\Source\Repos\Project1\main.cpp(17): Project1!main+0x76
1> D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl(79): Project1!invoke_main+0x39
2> D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl(288): Project1!__scrt_common_main_seh+0x12E
3> D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl(331): Project1!__scrt_common_main+0xE
4> D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_main.cpp(17): Project1!mainCRTStartup+0xE
5> KERNEL32!BaseThreadInitThunk+0x1D
6> ntdll!RtlUserThreadStart+0x28
0> F:\Source\Repos\Project1\main.cpp(5): Project1!func+0x6D
1> F:\Source\Repos\Project1\main.cpp(19): Project1!main+0xAC
2> D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl(79): Project1!invoke_main+0x39
3> D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl(288): Project1!__scrt_common_main_seh+0x12E
4> D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl(331): Project1!__scrt_common_main+0xE
5> D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_main.cpp(17): Project1!mainCRTStartup+0xE
6> KERNEL32!BaseThreadInitThunk+0x1D
7> ntdll!RtlUserThreadStart+0x28
777

See also

representation of an evaluation in a stacktrace
(class) [edit]