命名空間
變體
動作

std::basic_stacktrace

出自 cppreference.com
< cpp‎ | 工具
 
 
 
 
定義於標頭檔 <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 =
    std::basic_stacktrace<std::pmr::polymorphic_allocator<std::stacktrace_entry>>;

}
(3) (自 C++23 起)
1) `basic_stacktrace` 類別模板代表整個堆疊追蹤(stacktrace)或其特定部分的快照。它滿足 AllocatorAwareContainerSequenceContainerReversibleContainer 的要求,唯獨僅支援移動、賦值、交換以及針對 const 限定序列容器的操作,且其比較函式的語意與容器要求不同。
2) 使用預設 std::allocator 的 `basic_stacktrace` 便捷型別別名。
3) 使用 多型配置器(polymorphic allocator) 的 `basic_stacktrace` 便捷型別別名。

目前執行緒中當前評估 x0呼叫序列(invocation sequence)是一個評估序列 (x0, ..., xn),使得對於 i≥0xi 位於函式呼叫 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 是否為空
(公開成員函式) [編輯]
返回堆疊追蹤條目的數量
(公開成員函式) [編輯]
返回堆疊追蹤條目的最大可能數量
(公開成員函式) [編輯]
元素存取
存取指定的堆疊追蹤條目
(公開成員函式) [編輯]
存取指定且具有邊界檢查的堆疊追蹤條目
(公開成員函式) [編輯]
修改器
交換內容
(公開成員函式) [編輯]

[編輯] 非成員函式

比較兩個 basic_stacktrace 的大小與內容
(函式模板)
特化 std::swap 演算法
(函式模板) [編輯]
(C++23)
返回包含 basic_stacktrace 描述的字串
(函式模板) [編輯]
執行 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::idstd::stacktrace

[編輯] 範例

使用 Compiler Explorer 獲得的輸出:msvcgcc

#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);
}

可能輸出

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

[編輯] 參見

堆疊追蹤中求值結果的表示
(類別) [編輯]
English Deutsch 日本語 中文(简体) 中文(繁體)