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