LeviLamina
Loading...
Searching...
No Matches
StacktraceUtils.h
1#pragma once
2
3#include <atomic>
4#include <optional>
5#include <string>
6#include <vector>
7
8#include "ll/api/base/Macro.h"
9#include "ll/api/base/StdInt.h"
10
11namespace ll {
12
13class Stacktrace;
14
15class StacktraceEntry {
16 friend ::ll::Stacktrace;
17 void* address{};
18
19public:
20 using native_handle_type = void*;
21
22 explicit StacktraceEntry(void* address) : address(address) {}
23
24 void* native_handle() const { return address; }
25};
27 std::vector<StacktraceEntry> entries;
28 uint64 hash;
29
30public:
31 LLNDAPI static Stacktrace current(size_t skip = 0, size_t maxDepth = ~0ull);
32
33 uint64 getHash() const { return hash; }
34
35 size_t size() const { return entries.size(); }
36
37 bool empty() const { return entries.empty(); }
38
39 StacktraceEntry const& operator[](size_t index) const { return entries[index]; }
40};
41} // namespace ll
42
43namespace std {
44template <>
45struct hash<ll::StacktraceEntry> {
46 [[nodiscard]] size_t operator()(ll::StacktraceEntry const& val) const noexcept {
47 return hash<ll::StacktraceEntry::native_handle_type>{}(val.native_handle());
48 }
49};
50template <>
51struct hash<ll::Stacktrace> {
52 [[nodiscard]] size_t operator()(ll::Stacktrace const& val) const noexcept { return val.getHash(); }
53};
54} // namespace std
55
56namespace ll::inline utils::stacktrace_utils {
57class SymbolLoader {
58 void* handle;
59 static std::atomic_size_t count;
60
61public:
62 SymbolLoader(SymbolLoader const&) = delete;
63 SymbolLoader& operator=(SymbolLoader const&) = delete;
64
65 LLAPI SymbolLoader();
66 LLAPI SymbolLoader(std::string_view);
67 LLAPI ~SymbolLoader();
68};
69
71 std::optional<size_t> displacement;
72 std::string name;
73 std::optional<ulong> line;
74 std::string file;
75};
76
77LLNDAPI StackTraceEntryInfo getInfo(StacktraceEntry const&);
78LLNDAPI std::string toString(StacktraceEntry const&);
79LLNDAPI std::string toString(Stacktrace const&);
80} // namespace ll::inline utils::stacktrace_utils
Definition StacktraceUtils.h:15
Definition StacktraceUtils.h:26
STL namespace.
Definition StacktraceUtils.h:70