From ee2d9b8723561fb6a81b9c2c4fd7a93300c6154f Mon Sep 17 00:00:00 2001 From: Jonas Devlieghere Date: Thu, 7 Apr 2022 11:12:09 -0700 Subject: [PATCH] [lldb] Add Python bindings to print stack traces on crashes. As noticed in D87637, when LLDB crashes, we only print stack traces if LLDB is directly executed, not when used via Python bindings. Enabling this by default may be undesirable (libraries shouldn't be messing with signal handlers), so make this an explicit opt-in. I "commandeered" this patch from Jordan Rupprecht who put this up for review originally. Differential revision: https://reviews.llvm.org/D91835 --- lldb/bindings/interface/SBDebugger.i | 2 ++ lldb/include/lldb/API/SBDebugger.h | 2 ++ lldb/packages/Python/lldbsuite/test/dotest.py | 1 + lldb/source/API/SBDebugger.cpp | 11 +++++++++++ 4 files changed, 16 insertions(+) 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();