diff --git a/backward.hpp b/backward.hpp index 670aa45..360e363 100644 --- a/backward.hpp +++ b/backward.hpp @@ -3633,6 +3633,10 @@ template <> class TraceResolverImpl image_type = h->FileHeader.Machine; } + ~TraceResolverImpl() { + SymCleanup(GetCurrentProcess()); + } + static const int max_sym_len = 255; struct symbol_t { SYMBOL_INFO sym; @@ -3644,6 +3648,15 @@ template <> class TraceResolverImpl ResolvedTrace resolve(ResolvedTrace t) override { HANDLE process = GetCurrentProcess(); + std::string mod_info_str = ""; + HMODULE hmod = (HMODULE)SymGetModuleBase64(process, (DWORD64)t.addr); + if(hmod) { + const auto mod_info = get_mod_info(process)(hmod); + std::stringstream stream; + stream << mod_info.module_name << " (base 0x" << std::hex << (DWORD64)mod_info.base_address << ")"; + mod_info_str = stream.str(); + } + char name[256]; memset(&sym, 0, sizeof(sym)); @@ -3678,7 +3691,7 @@ template <> class TraceResolverImpl } t.source.function = name; - t.object_filename = ""; + t.object_filename = mod_info_str; t.object_function = name; return t;