From a32e22aa44e17634303b3f75bec19954961e0d59 Mon Sep 17 00:00:00 2001 From: Jeremy Rifkin <51220084+jeremy-rifkin@users.noreply.github.com> Date: Sat, 22 Feb 2025 13:20:03 -0600 Subject: [PATCH] Don't print internal errors when image base resolution fails, this can happen on mac since platform dylibs don't actually exist on disk. Closes #217. --- src/binary/object.cpp | 12 +++++++++--- src/symbols/symbols_core.cpp | 2 ++ 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/binary/object.cpp b/src/binary/object.cpp index 7f4d524..594e5d2 100644 --- a/src/binary/object.cpp +++ b/src/binary/object.cpp @@ -78,7 +78,9 @@ namespace detail { - reinterpret_cast(info.dli_fbase) + base.unwrap_value(); } else { - base.drop_error(); + if(!should_absorb_trace_exceptions()) { + base.drop_error(); + } } } return frame; @@ -101,7 +103,9 @@ namespace detail { - reinterpret_cast(info.dli_fbase) + base.unwrap_value(); } else { - base.drop_error(); + if(!should_absorb_trace_exceptions()) { + base.drop_error(); + } } } return frame; @@ -146,7 +150,9 @@ namespace detail { - reinterpret_cast(handle) + base.unwrap_value(); } else { - base.drop_error(); + if(!should_absorb_trace_exceptions()) { + base.drop_error(); + } } } else { std::fprintf(stderr, "%s\n", std::system_error(GetLastError(), std::system_category()).what()); diff --git a/src/symbols/symbols_core.cpp b/src/symbols/symbols_core.cpp index ab7574d..7160c5d 100644 --- a/src/symbols/symbols_core.cpp +++ b/src/symbols/symbols_core.cpp @@ -83,6 +83,8 @@ namespace detail { } } + // TODO: Symbol resolution code should probably handle when object addresses are 0 + std::vector resolve_frames(const std::vector& frames) { #if defined(CPPTRACE_GET_SYMBOLS_WITH_LIBDWARF) && defined(CPPTRACE_GET_SYMBOLS_WITH_DBGHELP) std::vector trace = libdwarf::resolve_frames(frames);