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