diff options
| author | aozeritsky <[email protected]> | 2023-06-18 15:12:26 +0300 | 
|---|---|---|
| committer | aozeritsky <[email protected]> | 2023-06-18 15:12:26 +0300 | 
| commit | 604a70cf50d50068e89d9fcd9f5d3227226a9b6c (patch) | |
| tree | ba1ff95ed14da243c3f1c47902ebcad8429741ea | |
| parent | fd0ad97f5a0ef95d584af0afb882bf979c79e440 (diff) | |
Fix backtraces
| -rw-r--r-- | ydb/library/yql/utils/backtrace/symbolizer_dummy.cpp | 17 | ||||
| -rw-r--r-- | ydb/library/yql/utils/backtrace/symbolizer_linux.cpp | 14 | 
2 files changed, 13 insertions, 18 deletions
diff --git a/ydb/library/yql/utils/backtrace/symbolizer_dummy.cpp b/ydb/library/yql/utils/backtrace/symbolizer_dummy.cpp index 505fc36394e..e14c3cc4fd5 100644 --- a/ydb/library/yql/utils/backtrace/symbolizer_dummy.cpp +++ b/ydb/library/yql/utils/backtrace/symbolizer_dummy.cpp @@ -2,6 +2,7 @@  #include "symbolizer.h"  #include <util/generic/hash.h> +#include <util/string/builder.h>  #ifdef _linux_  #include <dlfcn.h>  #include <link.h> @@ -13,7 +14,7 @@ int DlIterCallback(struct dl_phdr_info *info, size_t size, void *data)      Y_UNUSED(data);      if (*info->dlpi_name) {          TDllInfo dllInfo{ info->dlpi_name, (ui64)info->dlpi_addr }; -        ((THashMap<TString, TDllInfo>*)data)->emplace(dllInfo.Path, dllInfo); +        reinterpret_cast<THashMap<TString, TDllInfo>*>(data)->emplace(dllInfo.Path, dllInfo);      }      return 0; @@ -24,16 +25,17 @@ namespace NYql {  namespace NBacktrace {  extern THashMap<TString, TString> Mapping; -} -} +} // namespace NBacktrace +} // namespace NYql  class TBacktraceSymbolizer : public IBacktraceSymbolizer {  public:      TBacktraceSymbolizer() : IBacktraceSymbolizer() { -    #ifdef _linux_ +#ifdef _linux_          dl_iterate_phdr(DlIterCallback, &DLLs_); -    #endif +#endif      } +      TString SymbolizeFrame(void* ptr) override {          ui64 address = (ui64)ptr - 1; // last byte of the call instruction @@ -58,12 +60,9 @@ public:              modulePath = it->second;          } -        return "StackFrame: " + modulePath + " " + address + " " + offset + "\n"; +        return TStringBuilder() << "StackFrame: " << modulePath << " " << address << " " << offset << "\n";      } -    ~TBacktraceSymbolizer() override { -         -    }  private:      TString BinaryPath_ = "EXE";      THashMap<TString, TDllInfo> DLLs_; diff --git a/ydb/library/yql/utils/backtrace/symbolizer_linux.cpp b/ydb/library/yql/utils/backtrace/symbolizer_linux.cpp index 1058092865c..c55fffa6e35 100644 --- a/ydb/library/yql/utils/backtrace/symbolizer_linux.cpp +++ b/ydb/library/yql/utils/backtrace/symbolizer_linux.cpp @@ -6,6 +6,7 @@  #include <util/generic/hash.h>  #include <util/system/execpath.h> +#include <util/string/builder.h>  #include <dlfcn.h>  #include <link.h> @@ -20,16 +21,15 @@ namespace NBacktrace {  extern THashMap<TString, TString> Mapping; -} -} +} // namespace NBacktrace +} // namespace NYql  int DlIterCallback(struct dl_phdr_info *info, size_t size, void *data)  {      Y_UNUSED(size); -    Y_UNUSED(data);      if (*info->dlpi_name) {          TDllInfo dllInfo{ info->dlpi_name, (ui64)info->dlpi_addr }; -        ((THashMap<TString, TDllInfo>*)data)->emplace(dllInfo.Path, dllInfo); +        reinterpret_cast<THashMap<TString, TDllInfo>*>(data)->emplace(dllInfo.Path, dllInfo);      }      return 0; @@ -60,7 +60,7 @@ public:          }  #endif          if (!KikimrFormat_) { -            return "StackFrame: " + modulePath + " " + address + " " + offset + "\n"; +            return TStringBuilder() << "StackFrame: " << modulePath << " " << address << " " <<  offset << "\n";          }          llvm::object::SectionedAddress secAddr; @@ -68,10 +68,6 @@ public:          return NYql::NBacktrace::SymbolizeAndDumpToString(modulePath, secAddr, offset);      } -    ~TBacktraceSymbolizer() override { - -    } -      private:      THashMap<TString, TDllInfo> DLLs_;      TString BinaryPath_ = GetPersistentExecPath();  | 
