if (print_destructor_stack_trace->load()) {
std::string output = "Singleton " + type_name + " was destroyed.\n";
- // Get and symbolize stack trace
- constexpr size_t kMaxStackTraceDepth = 100;
- symbolizer::FrameArray<kMaxStackTraceDepth> addresses;
- if (!getStackTraceSafe(addresses)) {
+ auto stack_trace_getter = SingletonVault::stackTraceGetter().load();
+ auto stack_trace = stack_trace_getter ? stack_trace_getter() : "";
+ if (stack_trace.empty()) {
output += "Failed to get destructor stack trace.";
} else {
output += "Destructor stack trace:\n";
-
- constexpr size_t kDefaultCapacity = 500;
- symbolizer::ElfCache elfCache(kDefaultCapacity);
-
- symbolizer::Symbolizer symbolizer(&elfCache);
- symbolizer.symbolize(addresses);
-
- symbolizer::StringSymbolizePrinter printer;
- printer.println(addresses);
- output += printer.str();
+ output += stack_trace;
}
LOG(ERROR) << output;