diff --git a/lldb/bindings/interface/SBDebugger.i b/lldb/bindings/interface/SBDebugger.i index e9a6168d0c09..2239f049c651 100644 --- a/lldb/bindings/interface/SBDebugger.i +++ b/lldb/bindings/interface/SBDebugger.i @@ -141,6 +141,8 @@ public: 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 index 0893bc60315e..6a23077175b9 100644 --- a/lldb/include/lldb/API/SBDebugger.h +++ b/lldb/include/lldb/API/SBDebugger.h @@ -92,6 +92,8 @@ public: 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 index 5cf75391d844..489e6ce7bd7a 100644 --- a/lldb/packages/Python/lldbsuite/test/dotest.py +++ b/lldb/packages/Python/lldbsuite/test/dotest.py @@ -880,6 +880,7 @@ def run_suite(): import lldb lldb.SBDebugger.Initialize() + lldb.SBDebugger.PrintStackTraceOnError() checkLibcxxSupport() checkLibstdcxxSupport() diff --git a/lldb/source/API/SBDebugger.cpp b/lldb/source/API/SBDebugger.cpp index 3391665786d5..4d92a0a9b280 100644 --- 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 @@ lldb::SBError SBDebugger::InitializeWithErrorHandling() { 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();