NexusForce 1.0.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
stacktrace.hpp
浏览该文件的文档.
1#ifndef NEFORCE_CORE_SYSTEM_STACKTRACE_HPP__
2#define NEFORCE_CORE_SYSTEM_STACKTRACE_HPP__
3
11
14NEFORCE_BEGIN_NAMESPACE__
15
21
29class NEFORCE_API stacktrace : public istringify<stacktrace> {
30public:
37 class frame : public istringify<frame> {
38 private:
39 void* address_ = nullptr;
40
41 public:
45 frame() noexcept {}
46
51 explicit frame(void* addr) noexcept :
52 address_(addr) {}
53
58 NEFORCE_NODISCARD void* address() const noexcept { return address_; }
59
66 NEFORCE_NODISCARD string name() const;
67
73 NEFORCE_NODISCARD bool operator==(const frame& other) const noexcept { return address_ == other.address_; }
74
80 NEFORCE_NODISCARD bool operator!=(const frame& other) const noexcept { return !(*this == other); }
81
88 NEFORCE_NODISCARD string to_string() const;
89 };
90
91private:
92 vector<frame> frames_;
93
94public:
102 explicit stacktrace(size_t skip = 0, size_t max_depth = 64);
103
108 NEFORCE_NODISCARD size_t size() const noexcept { return frames_.size(); }
109
114 NEFORCE_NODISCARD bool empty() const noexcept { return frames_.empty(); }
115
121 NEFORCE_NODISCARD const frame& operator[](const size_t idx) const noexcept { return frames_[idx]; }
122
128 NEFORCE_NODISCARD frame& operator[](const size_t idx) noexcept { return frames_[idx]; }
129
134 NEFORCE_NODISCARD auto begin() const noexcept { return frames_.begin(); }
135
140 NEFORCE_NODISCARD auto end() const noexcept { return frames_.end(); }
141
146 NEFORCE_NODISCARD auto cbegin() const noexcept { return frames_.cbegin(); }
147
152 NEFORCE_NODISCARD auto cend() const noexcept { return frames_.cend(); }
153
160 NEFORCE_NODISCARD string to_string() const;
161};
162 // Stacktrace
164
165NEFORCE_END_NAMESPACE__
166#endif // NEFORCE_CORE_SYSTEM_STACKTRACE_HPP__
NEFORCE_NODISCARD string to_string() const
转换为字符串
NEFORCE_NODISCARD bool operator!=(const frame &other) const noexcept
不等比较
NEFORCE_NODISCARD string name() const
获取函数符号名称
frame() noexcept
默认构造函数
NEFORCE_NODISCARD bool operator==(const frame &other) const noexcept
相等比较
NEFORCE_NODISCARD void * address() const noexcept
获取返回地址
frame(void *addr) noexcept
从地址构造堆栈帧
NEFORCE_NODISCARD string to_string() const
转换为字符串
NEFORCE_NODISCARD size_t size() const noexcept
获取堆栈深度
NEFORCE_NODISCARD auto end() const noexcept
获取结束常量迭代器
stacktrace(size_t skip=0, size_t max_depth=64)
构造函数,捕获当前堆栈
NEFORCE_NODISCARD auto begin() const noexcept
获取起始常量迭代器
NEFORCE_NODISCARD const frame & operator[](const size_t idx) const noexcept
常量索引访问
NEFORCE_NODISCARD auto cend() const noexcept
获取结束常量迭代器
NEFORCE_NODISCARD frame & operator[](const size_t idx) noexcept
索引访问
NEFORCE_NODISCARD auto cbegin() const noexcept
获取起始常量迭代器
NEFORCE_NODISCARD bool empty() const noexcept
检查堆栈是否为空
动态大小数组容器
可字符串化接口
可字符串化接口
动态大小数组容器