From 1b0b7a43eac953228d1c56419719930574464822 Mon Sep 17 00:00:00 2001 From: Jeremy <51220084+jeremy-rifkin@users.noreply.github.com> Date: Thu, 21 Sep 2023 21:45:01 -0400 Subject: [PATCH] Added trace::current() methods --- include/cpptrace/cpptrace.hpp | 3 +++ src/cpptrace.cpp | 15 +++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/include/cpptrace/cpptrace.hpp b/include/cpptrace/cpptrace.hpp index f86e747..5eec394 100644 --- a/include/cpptrace/cpptrace.hpp +++ b/include/cpptrace/cpptrace.hpp @@ -30,6 +30,7 @@ namespace cpptrace { struct raw_trace { std::vector frames; explicit raw_trace(std::vector&& frames_) : frames(frames_) {} + CPPTRACE_API static raw_trace current(std::uint32_t skip = 0); CPPTRACE_API object_trace resolve_object_trace() const; CPPTRACE_API stacktrace resolve() const; CPPTRACE_API void clear(); @@ -53,6 +54,7 @@ namespace cpptrace { struct object_trace { std::vector frames; explicit object_trace(std::vector&& frames_) : frames(frames_) {} + CPPTRACE_API static object_trace current(std::uint32_t skip = 0); CPPTRACE_API stacktrace resolve() const; CPPTRACE_API void clear(); CPPTRACE_API bool empty() const noexcept; @@ -89,6 +91,7 @@ namespace cpptrace { std::vector frames; explicit stacktrace() {} explicit stacktrace(std::vector&& frames_) : frames(frames_) {} + CPPTRACE_API static stacktrace current(std::uint32_t skip = 0); CPPTRACE_API void print() const; CPPTRACE_API void print(std::ostream& stream) const; CPPTRACE_API void print(std::ostream& stream, bool color) const; diff --git a/src/cpptrace.cpp b/src/cpptrace.cpp index f573f15..3cd642b 100644 --- a/src/cpptrace.cpp +++ b/src/cpptrace.cpp @@ -30,6 +30,11 @@ namespace cpptrace { std::atomic_bool absorb_trace_exceptions(true); } + CPPTRACE_FORCE_NO_INLINE CPPTRACE_API + raw_trace raw_trace::current(std::uint32_t skip) { + return generate_raw_trace(skip + 1); + } + CPPTRACE_API object_trace raw_trace::resolve_object_trace() const { return object_trace(detail::get_frames_object_info(frames)); @@ -54,6 +59,11 @@ namespace cpptrace { return frames.empty(); } + CPPTRACE_FORCE_NO_INLINE CPPTRACE_API + object_trace object_trace::current(std::uint32_t skip) { + return generate_object_trace(skip + 1); + } + CPPTRACE_API stacktrace object_trace::resolve() const { return stacktrace(detail::resolve_frames(frames)); @@ -99,6 +109,11 @@ namespace cpptrace { return stream; } + CPPTRACE_FORCE_NO_INLINE CPPTRACE_API + stacktrace stacktrace::current(std::uint32_t skip) { + return generate_trace(skip + 1); + } + CPPTRACE_API void stacktrace::print() const { print(std::cerr, true);