/
githubmirror
/
nbs
Обзор
Документация
Войти
/
githubmirror
/
nbs
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
contrib/ydb/core/base/backtrace.cpp
53 строки
1 KB
alexv-smirnov
KIKIMR-18630 Switch Arcadia to contrib/ydb
05 ноя 2023, 22:32
05 ноя 2023, 22:32
e24498b
Код
Авторство
О чём код?
#include "backtrace.h" #include <util/system/backtrace.h> #if defined(__linux__) || defined(__APPLE__) #include <library/cpp/dwarf_backtrace/backtrace.h> #include <util/stream/format.h> #endif namespace NKikimr { #if defined(__linux__) || defined(__APPLE__) namespace { void FormatBacktraceDwarf(IOutputStream* out, void* const* backtrace, size_t backtraceSize) { size_t frameIndex = 0; bool allFramesUnknown = true; auto error = NDwarf::ResolveBacktrace({backtrace, backtraceSize}, [out, &frameIndex, &allFramesUnknown](const NDwarf::TLineInfo& info) { const TString & fileName = info.FileName == "???" ? "??" : info.FileName; if (fileName != "??") { allFramesUnknown = false; } const TString & functionName = info.FunctionName == "???" ? "??" : info.FunctionName; *out << frameIndex << ". " << fileName << ":" << info.Line << ": " << functionName << " @ " << Hex(info.Address, HF_ADDX) << Endl; ++frameIndex; return NDwarf::EResolving::Continue; }); /// Fallback to default backtrace format if (error || allFramesUnknown) { FormatBackTrace(out, backtrace, backtraceSize); } } } void EnableYDBBacktraceFormat() { SetFormatBackTraceFn(FormatBacktraceDwarf); } #else void EnableYDBBacktraceFormat() { SetFormatBackTraceFn(FormatBackTrace); } #endif }