feat: allow to obtain the stack trace as a string (#1075)
diff --git a/src/glog/logging.h b/src/glog/logging.h
index a0759df..9ab897e 100644
--- a/src/glog/logging.h
+++ b/src/glog/logging.h
@@ -1736,6 +1736,9 @@
GLOG_EXPORT void InstallFailureWriter(void (*writer)(const char* data,
size_t size));
+// Dump stack trace as a string.
+GLOG_EXPORT std::string GetStackTrace();
+
} // namespace google
#endif // GLOG_LOGGING_H
diff --git a/src/logging.cc b/src/logging.cc
index fb283fd..fc63995 100644
--- a/src/logging.cc
+++ b/src/logging.cc
@@ -1705,8 +1705,7 @@
std::snprintf(fileline, sizeof(fileline), "%s:%d", data_->basename_, line);
#ifdef HAVE_STACKTRACE
if (FLAGS_log_backtrace_at == fileline) {
- string stacktrace;
- DumpStackTraceToString(&stacktrace);
+ string stacktrace = GetStackTrace();
stream() << " (stacktrace:\n" << stacktrace << ") ";
}
#endif
diff --git a/src/utilities.cc b/src/utilities.cc
index bd949ef..92bc5e5 100644
--- a/src/utilities.cc
+++ b/src/utilities.cc
@@ -287,12 +287,6 @@
}
REGISTER_MODULE_INITIALIZER(utilities, MyUserNameInitializer())
-#ifdef HAVE_STACKTRACE
-void DumpStackTraceToString(string* stacktrace) {
- DumpStackTrace(1, DebugWriteToString, stacktrace);
-}
-#endif
-
// We use an atomic operation to prevent problems with calling CrashReason
// from inside the Mutex implementation (potentially through RAW_CHECK).
static std::atomic<const logging::internal::CrashReason*> g_reason{nullptr};
@@ -323,4 +317,13 @@
}
} // namespace glog_internal_namespace_
+
+#ifdef HAVE_STACKTRACE
+std::string GetStackTrace() {
+ std::string stacktrace;
+ DumpStackTrace(1, DebugWriteToString, &stacktrace);
+ return stacktrace;
+}
+#endif
+
} // namespace google
diff --git a/src/utilities.h b/src/utilities.h
index 581bff7..8096f1c 100644
--- a/src/utilities.h
+++ b/src/utilities.h
@@ -162,8 +162,6 @@
// (Doesn't modify filepath, contrary to basename() in libgen.h.)
const char* const_basename(const char* filepath);
-void DumpStackTraceToString(std::string* stacktrace);
-
void SetCrashReason(const logging::internal::CrashReason* r);
void InitGoogleLoggingUtilities(const char* argv0);