diff --git a/lldb/bindings/interface/SBDebugger.i b/lldb/bindings/interface/SBDebugger.i --- a/lldb/bindings/interface/SBDebugger.i +++ b/lldb/bindings/interface/SBDebugger.i @@ -141,6 +141,8 @@ static SBError InitializeWithErrorHandling(); + static void PrintStackTraceOnError(); + static void Terminate(); diff --git a/lldb/include/lldb/API/SBDebugger.h b/lldb/include/lldb/API/SBDebugger.h --- a/lldb/include/lldb/API/SBDebugger.h +++ b/lldb/include/lldb/API/SBDebugger.h @@ -92,6 +92,8 @@ static lldb::SBError InitializeWithErrorHandling(); + static void PrintStackTraceOnError(); + static void Terminate(); // Deprecated, use the one that takes a source_init_files bool. diff --git a/lldb/packages/Python/lldbsuite/test/dotest.py b/lldb/packages/Python/lldbsuite/test/dotest.py --- a/lldb/packages/Python/lldbsuite/test/dotest.py +++ b/lldb/packages/Python/lldbsuite/test/dotest.py @@ -880,6 +880,7 @@ import lldb lldb.SBDebugger.Initialize() + lldb.SBDebugger.PrintStackTraceOnError() checkLibcxxSupport() checkLibstdcxxSupport() diff --git a/lldb/source/API/SBDebugger.cpp b/lldb/source/API/SBDebugger.cpp --- a/lldb/source/API/SBDebugger.cpp +++ b/lldb/source/API/SBDebugger.cpp @@ -57,6 +57,8 @@ #include "llvm/ADT/StringRef.h" #include "llvm/Support/DynamicLibrary.h" #include "llvm/Support/ManagedStatic.h" +#include "llvm/Support/PrettyStackTrace.h" +#include "llvm/Support/Signals.h" using namespace lldb; using namespace lldb_private; @@ -206,6 +208,15 @@ return error; } +void SBDebugger::PrintStackTraceOnError() { + LLDB_INSTRUMENT(); + + llvm::EnablePrettyStackTrace(); + // We don't have a meaningful argv[0] to use, so use "SBDebugger" as a + // substitute. + llvm::sys::PrintStackTraceOnErrorSignal("SBDebugger"); +} + void SBDebugger::Terminate() { LLDB_INSTRUMENT();