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 内部。
一个 堆栈跟踪 是调用序列的近似表示,由堆栈跟踪条目组成。
一个 堆栈轨迹条目 表示堆栈轨迹中的一次求值过程。在 C++ 标准库中通过 std::stacktrace_entry 进行表示。
目录 |
模板参数
| 分配器 | - |
用于获取/释放内存并在该内存中构造/销毁元素的分配器。该类型必须满足
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
(公开成员函数) |
|
销毁
basic_stacktrace
(公开成员函数) |
|
赋值给
basic_stacktrace
(公开成员函数) |
|
|
[static]
|
获取当前堆栈轨迹或其指定部分
(公开静态成员函数) |
|
返回关联的分配器
(公开成员函数) |
|
迭代器 |
|
|
返回指向起始位置的迭代器
(公开成员函数) |
|
|
返回指向末尾位置的迭代器
(公开成员函数) |
|
|
返回指向起始位置的逆向迭代器
(公开成员函数) |
|
|
返回指向末尾位置的逆向迭代器
(公开成员函数) |
|
容量 |
|
检查
basic_stacktrace
是否为空
(公开成员函数) |
|
|
返回堆栈轨迹条目数量
(公开成员函数) |
|
|
返回堆栈轨迹条目的最大可能数量
(公开成员函数) |
|
元素访问 |
|
|
访问指定的堆栈轨迹条目
(公开成员函数) |
|
|
带边界检查地访问指定的堆栈轨迹条目
(公开成员函数) |
|
修改器 |
|
|
交换内容
(公开成员函数) |
|
非成员函数
|
(C++23)
|
比较两个
basic_stacktrace
值的大小和内容
(函数模板) |
|
特化
std::swap
算法
(函数模板) |
|
|
(C++23)
|
返回包含
basic_stacktrace
描述信息的字符串
(函数模板) |
|
(C++23)
|
对
basic_stracktrace
执行流输出操作
(函数模板) |
辅助类
|
std::basic_stacktrace
的哈希支持
(类模板特化) |
|
basic_stacktrace
的格式化支持
(类模板特化) |
注释
为在热点路径或嵌入式环境中使用
basic_stacktrace
提供了自定义分配器支持。用户可在栈上或其他合适位置分配
stacktrace_entry
对象。
由
std::basic_stacktrace
拥有的
std::stacktrace_entry
对象序列是不可变的,该序列要么为空,要么表示整个堆栈跟踪中的一个连续区间。
当
std::basic_stacktrace
不可用时,可使用
boost
::
stacktrace
::
basic_stacktrace
(可通过
Boost.Stacktrace
获取)作为替代方案。
| 功能测试 宏 | 值 | 标准 | 功能特性 |
|---|---|---|---|
__cpp_lib_stacktrace
|
202011L
|
(C++23) | 堆栈追踪 库 |
__cpp_lib_formatters
|
202302L
|
(C++23) | 格式化 std::thread::id 和 std::stacktrace |
示例
使用 Compiler Explorer 获得的输出: msvc 和 gcc 。
可能的输出:
// msvc 输出(以 '⤶' 箭头结尾的行被拆分以适应宽度): 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 输出: 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)
|
栈踪中求值过程的表示
(类) |