std::basic_stacktrace
出自 cppreference.com
| 定義於標頭檔 <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 起) |
1) `basic_stacktrace` 類別模板代表整個堆疊追蹤(stacktrace)或其特定部分的快照。它滿足 AllocatorAwareContainer、SequenceContainer 和 ReversibleContainer 的要求,唯獨僅支援移動、賦值、交換以及針對 const 限定序列容器的操作,且其比較函式的語意與容器要求不同。
2) 使用預設 std::allocator 的 `basic_stacktrace` 便捷型別別名。
3) 使用 多型配置器(polymorphic allocator) 的 `basic_stacktrace` 便捷型別別名。
目前執行緒中當前評估 x0 的呼叫序列(invocation sequence)是一個評估序列 (x0, ..., xn),使得對於 i≥0,xi 位於函式呼叫 xi+1 之內。
堆疊追蹤(stacktrace)是呼叫序列的近似表示,由堆疊追蹤條目(stacktrace entries)組成。
堆疊追蹤條目(stacktrace entry)代表堆疊追蹤中的一個評估。它由 C++ 標準函式庫中的 std::stacktrace_entry 表示。
目錄 |
[編輯] 模板參數
| 配置器 (Allocator) | - | 用於獲取/釋放記憶體以及在該記憶體中建構/解構元素的配置器。該型別必須符合 Allocator 的要求。若 Allocator::value_type 不是 std::stacktrace_entry,則程式格式錯誤(ill-formed)。 |
[編輯] 成員型別
| 成員型別 | 定義 |
value_type
|
std::stacktrace_entry |
const_reference
|
const value_type& |
reference
|
value_type& |
const_iterator
|
實作定義的 const 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(公開成員函式) | |
| [靜態] |
獲取當前堆疊追蹤或其特定部分 (公開靜態成員函式) |
| 回傳關聯的配置器 (公開成員函式) | |
迭代器 | |
| 回傳指向起點的反覆器 (公開成員函式) | |
| 回傳指向終點的反覆器 (公開成員函式) | |
| 回傳指向起點的反向反覆器 (公開成員函式) | |
| 回傳指向終點的反向反覆器 (公開成員函式) | |
容量 | |
檢查 basic_stacktrace 是否為空(公開成員函式) | |
| 返回堆疊追蹤條目的數量 (公開成員函式) | |
| 返回堆疊追蹤條目的最大可能數量 (公開成員函式) | |
元素存取 | |
| 存取指定的堆疊追蹤條目 (公開成員函式) | |
| 存取指定且具有邊界檢查的堆疊追蹤條目 (公開成員函式) | |
修改器 | |
| 交換內容 (公開成員函式) | |
[編輯] 非成員函式
| (C++23) |
比較兩個 basic_stacktrace 的大小與內容(函式模板) |
| 特化 std::swap 演算法 (函式模板) | |
| (C++23) |
返回包含 basic_stacktrace 描述的字串(函式模板) |
| (C++23) |
執行 basic_stracktrace 的串流輸出(函式模板) |
[編輯] 輔助類別
| std::basic_stacktrace 的雜湊支援 (類別模板特化) | |
basic_stacktrace 的格式化支援(類別模板特化) |
[編輯] 附註
提供自訂配置器支援,以便在熱路徑(hot path)或嵌入式環境中使用 basic_stacktrace。使用者可在適當的情況下,將 stacktrace_entry 物件配置於堆疊(stack)或其他地方。
由 std::basic_stacktrace 所擁有的 std::stacktrace_entry 物件序列是不可變的,且其內容或是為空,或是表示整個堆疊追蹤的一個連續區間。
若 std::basic_stacktrace 不可用,可改用 boost::stacktrace::basic_stacktrace(可於 Boost.Stacktrace 取得)。
| 功能測試巨集 | 數值 | 標準 | 功能 |
|---|---|---|---|
__cpp_lib_stacktrace |
202011L |
(C++23) | Stacktrace 函式庫 |
__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) |
堆疊追蹤中求值結果的表示 (類別) |