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
10
namespace
ll {
11
12
class
Stacktrace;
13
14
class
StacktraceEntry
{
15
friend ::ll::Stacktrace;
16
void
* address{};
17
18
public
:
19
using
native_handle_type =
void
*;
20
21
explicit
StacktraceEntry
(
void
* address) : address(address) {}
22
23
void
* native_handle()
const
{
return
address; }
24
};
25
class
Stacktrace
{
26
std::vector<StacktraceEntry> entries;
27
uint64 hash;
28
29
public
:
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
42
namespace
std
{
43
template
<>
44
struct
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
};
49
template
<>
50
struct
hash<ll::Stacktrace> {
51
[[nodiscard]]
size_t
operator()(
ll::Stacktrace
const
& val)
const
noexcept
{
return
val.getHash(); }
52
};
53
}
// namespace std
54
55
namespace
ll::inline utils::stacktrace_utils {
56
class
SymbolLoader
{
57
void
* handle;
58
static
std::atomic_size_t count;
59
60
public
:
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
69
struct
StackTraceEntryInfo
{
70
std::optional<size_t> displacement;
71
std::string name;
72
std::optional<ulong> line;
73
std::string file;
74
};
75
76
LLNDAPI
StackTraceEntryInfo
getInfo(StacktraceEntry
const
&);
77
LLNDAPI std::string toString(StacktraceEntry
const
&);
78
LLNDAPI std::string toString(Stacktrace
const
&);
79
}
// namespace ll::inline utils::stacktrace_utils
ll::StacktraceEntry
Definition
StacktraceUtils.h:14
ll::Stacktrace
Definition
StacktraceUtils.h:25
utils::stacktrace_utils::SymbolLoader
Definition
StacktraceUtils.h:56
std
STL namespace.
utils::stacktrace_utils::StackTraceEntryInfo
Definition
StacktraceUtils.h:69
src
ll
api
utils
StacktraceUtils.h
Generated on Sat Apr 26 2025 05:55:20 for LeviLamina by
1.12.0