• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

STEllAR-GROUP / hpx / #882

31 Aug 2023 07:44PM UTC coverage: 41.798% (-44.7%) from 86.546%
#882

push

19442 of 46514 relevant lines covered (41.8%)

126375.38 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

85.71
/libs/core/debugging/include/hpx/debugging/backtrace/backtrace.hpp
1
//  Copyright (c) 2011 Bryce Lelbach
2
//  Copyright (c) 2011-2023 Hartmut Kaiser
3
//  Copyright (c) 2010 Artyom Beilis (Tonkikh)
4
//
5
//  SPDX-License-Identifier: BSL-1.0
6
//  Distributed under the Boost Software License, Version 1.0. (See
7
//  accompanying file LICENSE_1_0.txt or copy at
8
//  http://www.boost.org/LICENSE_1_0.txt)
9

10
#pragma once
11

12
#include <hpx/config.hpp>
13

14
#include <cstddef>
15
#include <iosfwd>
16
#include <string>
17
#include <vector>
18

19
///////////////////////////////////////////////////////////////////////////////
20
namespace hpx::util {
21

22
    HPX_CXX_EXPORT class backtrace
23
    {
24
    public:
25
        HPX_CORE_EXPORT explicit backtrace(
26
            std::size_t frames_no = HPX_HAVE_THREAD_BACKTRACE_DEPTH);
27

28
        backtrace(backtrace const&) = default;
29
        backtrace(backtrace&&) = default;
30
        backtrace& operator=(backtrace const&) = default;
31
        backtrace& operator=(backtrace&&) = default;
32

33
        virtual ~backtrace() = default;
34

35
        [[nodiscard]] std::size_t stack_size() const noexcept
36
        {
5✔
37
            return frames_.size();
38
        }
5✔
39

5✔
40
        [[nodiscard]] void* return_address(std::size_t frame_no) const noexcept
41
        {
5✔
42
            if (frame_no < stack_size())
5✔
43
                return frames_[frame_no];
44
            return nullptr;
45
        }
5✔
46

5✔
47
        HPX_CORE_EXPORT void trace_line(
5✔
48
            std::size_t frame_no, std::ostream& out) const;
49

50
        [[nodiscard]] HPX_CORE_EXPORT std::string trace_line(
51
            std::size_t frame_no) const;
52

53
        [[nodiscard]] HPX_CORE_EXPORT std::string trace() const;
54

55
        HPX_CORE_EXPORT void trace(std::ostream& out) const;
5✔
56

57
    private:
58
        std::vector<void*> frames_;
59
    };
60

61
    namespace detail {
62

63
        HPX_CXX_EXPORT class trace_manip
64
        {
65
        public:
66
            explicit constexpr trace_manip(backtrace const* tr) noexcept
67
              : tr_(tr)
68
            {
69
            }
70
            HPX_CORE_EXPORT std::ostream& write(std::ostream& out) const;
71

72
        private:
73
            backtrace const* tr_;
74
        };
75

76
        HPX_CXX_EXPORT HPX_CORE_EXPORT std::ostream& operator<<(
77
            std::ostream& out, trace_manip const& t);
78
    }    // namespace detail
79

80
    HPX_CXX_EXPORT template <typename E>
81
    [[nodiscard]] detail::trace_manip trace(E const& e)
82
    {
5✔
83
        auto const* tr = dynamic_cast<backtrace const*>(&e);
84
        return detail::trace_manip(tr);
5✔
85
    }
86

5✔
87
    HPX_CXX_EXPORT [[nodiscard]] HPX_CORE_EXPORT std::string trace(
88
        std::size_t frames_no = HPX_HAVE_THREAD_BACKTRACE_DEPTH);
89
}    // namespace hpx::util
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc