aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorv-belikov <v-belikov@yandex-team.com>2025-03-06 13:55:31 +0300
committerv-belikov <v-belikov@yandex-team.com>2025-03-06 15:13:18 +0300
commit0ef3507641139b77885d5d458dbcbbb76297310b (patch)
tree79e5c5b06bb1cce5c0192c699fd5935a0d50e206
parent618663dff0c22bb5fc2a8b1d946d6b91ac572fb4 (diff)
downloadydb-0ef3507641139b77885d5d458dbcbbb76297310b.tar.gz
allow disable arcadia backtrace
Проблема: исключения отнаследованные от `TWithBackTrace` едят много CPU, что уже приводило к инцидентам. Кроме того, они не работают в фреймворке uservices. Решение: разрешить отключать сбор бэктрейсов в рантайме commit_hash:ad101368d384c90b5b37ac66276ae6611731d579
-rw-r--r--util/system/backtrace.cpp14
-rw-r--r--util/system/backtrace.h5
2 files changed, 18 insertions, 1 deletions
diff --git a/util/system/backtrace.cpp b/util/system/backtrace.cpp
index 97a798e9bb7..482c02b7b84 100644
--- a/util/system/backtrace.cpp
+++ b/util/system/backtrace.cpp
@@ -232,6 +232,16 @@ TResolvedSymbol ResolveSymbol(void* sym, char*, size_t) {
}
#endif
+TBackTraceFn BackTraceFn = BackTrace;
+
+void SetBackTraceFn(TBackTraceFn f) {
+ BackTraceFn = f;
+}
+
+TBackTraceFn GetBackTraceFn() {
+ return BackTraceFn;
+}
+
void FormatBackTrace(IOutputStream* out, void* const* backtrace, size_t backtraceSize) {
char tmpBuf[1024];
@@ -270,7 +280,9 @@ TBackTrace::TBackTrace()
}
void TBackTrace::Capture() {
- Size = BackTrace(Data, CAPACITY);
+ if (BackTraceFn) {
+ Size = BackTraceFn(Data, CAPACITY);
+ }
}
void TBackTrace::PrintTo(IOutputStream& out) const {
diff --git a/util/system/backtrace.h b/util/system/backtrace.h
index 2fce7585c3a..4e5ab6a68e1 100644
--- a/util/system/backtrace.h
+++ b/util/system/backtrace.h
@@ -7,6 +7,11 @@ class IOutputStream;
size_t BackTrace(void** p, size_t len);
+using TBackTraceFn = size_t (*)(void** p, size_t len);
+
+void SetBackTraceFn(TBackTraceFn f);
+TBackTraceFn GetBackTraceFn();
+
struct TResolvedSymbol {
const char* Name;
void* NearestSymbol;