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