summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoraozeritsky <[email protected]>2023-06-18 15:12:26 +0300
committeraozeritsky <[email protected]>2023-06-18 15:12:26 +0300
commit604a70cf50d50068e89d9fcd9f5d3227226a9b6c (patch)
treeba1ff95ed14da243c3f1c47902ebcad8429741ea
parentfd0ad97f5a0ef95d584af0afb882bf979c79e440 (diff)
Fix backtraces
-rw-r--r--ydb/library/yql/utils/backtrace/symbolizer_dummy.cpp17
-rw-r--r--ydb/library/yql/utils/backtrace/symbolizer_linux.cpp14
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();