#pragma once #include #include #include #include #include namespace NDwarf { struct TLineInfo { TString FileName; int Line; int Col; TString FunctionName; uintptr_t Address; int Index; }; struct TError { int Code; TString Message; }; enum class EResolving { Continue = 0, Break = 1, }; using TCallback = std::function; // Resolves backtrace addresses and calls the callback for all line infos of inlined functions there. // Stops execution if the callback returns `EResolving::Break`. [[nodiscard]] TMaybe ResolveBacktrace(TArrayRef backtrace, TCallback callback); // Same as `ResolveBacktrace` but uses a separate single-threaded `backtrace_state` protected by a static mutex. // // libbacktrace may leak memory when used concurrently even with the `threaded` option set to 1, // which is explicitly stated in its source code (contrib/libs/backtrace/dwarf.c:dwarf_lookup_pc, // contrib/libs/backtrace/fileline.c:fileline_initialize) and confirmed in MAPSBKOFCT-1959. [[nodiscard]] TMaybe ResolveBacktraceLocked(TArrayRef backtrace, TCallback callback); }