mimic++
v10.0.1
Toggle main menu visibility
Loading...
Searching...
No Matches
cpptrace.hpp
Go to the documentation of this file.
1
// Copyright Dominic (DNKpp) Koepke 2024 - 2025.
2
// Distributed under the Boost Software License, Version 1.0.
3
// (See accompanying file LICENSE_1_0.txt or copy at
4
// https://www.boost.org/LICENSE_1_0.txt)
5
6
#ifndef MIMICPP_EXT_STACKTRACE_CPPTRACE_HPP
7
#define MIMICPP_EXT_STACKTRACE_CPPTRACE_HPP
8
9
#include "
mimic++/Fwd.hpp
"
10
#include "
mimic++/config/Config.hpp
"
11
12
#ifndef MIMICPP_DETAIL_IS_MODULE
13
#if __has_include(<cpptrace/basic.hpp>)
14
#include <cpptrace/basic.hpp>
15
#elif __has_include(<cpptrace/cpptrace.hpp>)
16
// this is necessary for old cpptrace versions.
17
// see: https://github.com/jeremy-rifkin/libassert/issues/110
18
#include <cpptrace/cpptrace.hpp>
19
#else
20
#error "The cpptrace stacktrace backend is explicitly enabled, but the the required include-file can not be found."
21
#endif
22
23
#include <limits>
24
#include <string>
25
#endif
26
27
struct
mimicpp::util::stacktrace::find_backend
28
{
29
using
type
= cpptrace::stacktrace;
30
};
31
32
template
<>
33
struct
mimicpp::util::stacktrace::backend_traits
<cpptrace::
stacktrace
>
34
{
35
using
Backend
= cpptrace::stacktrace;
36
37
[[nodiscard]]
38
static
Backend
current
(std::size_t
const
skip, std::size_t
const
max)
noexcept
39
{
40
MIMICPP_ASSERT
(skip < std::numeric_limits<std::size_t>::max() - max,
"Skip + max is too high."
);
41
42
return
cpptrace::generate_trace(skip + 1, max);
43
}
44
45
[[nodiscard]]
46
static
Backend
current
(std::size_t
const
skip)
47
{
48
MIMICPP_ASSERT
(skip < std::numeric_limits<std::size_t>::max(),
"Skip is too high."
);
49
50
return
cpptrace::generate_trace(skip + 1);
51
}
52
53
[[nodiscard]]
54
static
MIMICPP_DETAIL_CONSTEXPR_VECTOR
std::size_t
size
(
Backend
const
&
stacktrace
)
55
{
56
return
stacktrace
.frames.size();
57
}
58
59
[[nodiscard]]
60
static
MIMICPP_DETAIL_CONSTEXPR_VECTOR
bool
empty
(
Backend
const
&
stacktrace
)
61
{
62
return
stacktrace
.frames.empty();
63
}
64
65
[[nodiscard]]
66
static
MIMICPP_DETAIL_CONSTEXPR_STRING
std::string
description
(
Backend
const
&
stacktrace
, std::size_t
const
at)
67
{
68
return
frame
(
stacktrace
, at).symbol;
69
}
70
71
[[nodiscard]]
72
static
MIMICPP_DETAIL_CONSTEXPR_STRING
std::string
source_file
(
Backend
const
&
stacktrace
, std::size_t
const
at)
73
{
74
return
frame
(
stacktrace
, at).filename;
75
}
76
77
[[nodiscard]]
78
static
MIMICPP_DETAIL_CONSTEXPR_VECTOR
std::size_t
source_line
(
Backend
const
&
stacktrace
, std::size_t
const
at)
79
{
80
return
frame
(
stacktrace
, at).line.value_or(0u);
81
}
82
83
[[nodiscard]]
84
static
MIMICPP_DETAIL_CONSTEXPR_VECTOR
cpptrace::stacktrace_frame
const
&
frame
(
Backend
const
&
stacktrace
, std::size_t
const
at)
85
{
86
return
stacktrace
.frames.at(at);
87
}
88
};
89
90
#endif
Config.hpp
MIMICPP_DETAIL_CONSTEXPR_STRING
#define MIMICPP_DETAIL_CONSTEXPR_STRING
Definition
Config.hpp:63
MIMICPP_DETAIL_CONSTEXPR_VECTOR
#define MIMICPP_DETAIL_CONSTEXPR_VECTOR
Definition
Config.hpp:72
MIMICPP_ASSERT
#define MIMICPP_ASSERT(condition, msg)
Definition
Config.hpp:54
Fwd.hpp
mimicpp::util::stacktrace
Definition
Fwd.hpp:453
mimicpp::util::stacktrace::backend_traits< cpptrace::stacktrace >::source_file
static MIMICPP_DETAIL_CONSTEXPR_STRING std::string source_file(Backend const &stacktrace, std::size_t const at)
Definition
cpptrace.hpp:72
mimicpp::util::stacktrace::backend_traits< cpptrace::stacktrace >::empty
static MIMICPP_DETAIL_CONSTEXPR_VECTOR bool empty(Backend const &stacktrace)
Definition
cpptrace.hpp:60
mimicpp::util::stacktrace::backend_traits< cpptrace::stacktrace >::current
static Backend current(std::size_t const skip)
Definition
cpptrace.hpp:46
mimicpp::util::stacktrace::backend_traits< cpptrace::stacktrace >::Backend
cpptrace::stacktrace Backend
Definition
cpptrace.hpp:35
mimicpp::util::stacktrace::backend_traits< cpptrace::stacktrace >::description
static MIMICPP_DETAIL_CONSTEXPR_STRING std::string description(Backend const &stacktrace, std::size_t const at)
Definition
cpptrace.hpp:66
mimicpp::util::stacktrace::backend_traits< cpptrace::stacktrace >::current
static Backend current(std::size_t const skip, std::size_t const max) noexcept
Definition
cpptrace.hpp:38
mimicpp::util::stacktrace::backend_traits< cpptrace::stacktrace >::frame
static MIMICPP_DETAIL_CONSTEXPR_VECTOR cpptrace::stacktrace_frame const & frame(Backend const &stacktrace, std::size_t const at)
Definition
cpptrace.hpp:84
mimicpp::util::stacktrace::backend_traits< cpptrace::stacktrace >::size
static MIMICPP_DETAIL_CONSTEXPR_VECTOR std::size_t size(Backend const &stacktrace)
Definition
cpptrace.hpp:54
mimicpp::util::stacktrace::backend_traits< cpptrace::stacktrace >::source_line
static MIMICPP_DETAIL_CONSTEXPR_VECTOR std::size_t source_line(Backend const &stacktrace, std::size_t const at)
Definition
cpptrace.hpp:78
mimicpp::util::stacktrace::backend_traits
Trait type for stacktrace backends.
Definition
Fwd.hpp:459
mimicpp::util::stacktrace::find_backend
Definition
Stacktrace.hpp:529
mimicpp::util::stacktrace::find_backend::type
NullBackend type
Definition
Stacktrace.hpp:530
mimic++_ext
stacktrace
cpptrace.hpp
Generated on
for mimic++ by
1.18.0