[Lldb-commits] [lldb] e9fbddf - [lldb] Expose SBProcess::IsLiveDebugSession() (#203111)

via lldb-commits lldb-commits at lists.llvm.org
Wed Jun 10 15:49:25 PDT 2026


Author: Alexandre Perez
Date: 2026-06-10T15:49:21-07:00
New Revision: e9fbddf223976da11f40291a310d3308c61ea778

URL: https://github.com/llvm/llvm-project/commit/e9fbddf223976da11f40291a310d3308c61ea778
DIFF: https://github.com/llvm/llvm-project/commit/e9fbddf223976da11f40291a310d3308c61ea778.diff

LOG: [lldb] Expose SBProcess::IsLiveDebugSession() (#203111)

Expose the existing `Process::IsLiveDebugSession()` through the SB API
as `SBProcess::IsLiveDebugSession()`, letting clients distinguish a live
debuggee from a post-mortem session such as a core file or minidump. It
returns `false` when there is no underlying process, consistent with
other `SBProcess` query methods.

Added: 
    

Modified: 
    lldb/include/lldb/API/SBProcess.h
    lldb/source/API/SBProcess.cpp
    lldb/test/API/functionalities/postmortem/elf-core/TestLinuxCore.py
    lldb/test/API/python_api/process/TestProcessAPI.py

Removed: 
    


################################################################################
diff  --git a/lldb/include/lldb/API/SBProcess.h b/lldb/include/lldb/API/SBProcess.h
index 882b8bd837131..f42b30007a64b 100644
--- a/lldb/include/lldb/API/SBProcess.h
+++ b/lldb/include/lldb/API/SBProcess.h
@@ -424,6 +424,15 @@ class LLDB_API SBProcess {
   ///     the process isn't loaded from a core file.
   lldb::SBFileSpec GetCoreFile();
 
+  /// Check whether this process is a live debug session, as opposed to a
+  /// post-mortem session such as a core file or minidump.
+  ///
+  /// \return
+  ///     \b true if the process represents a live debug session, \b false if it
+  ///     is a post-mortem session (e.g. a core file) or there is no underlying
+  ///     process.
+  bool IsLiveDebugSession() const;
+
   /// \{
   /// \group Mask Address Methods
   ///

diff  --git a/lldb/source/API/SBProcess.cpp b/lldb/source/API/SBProcess.cpp
index 77d82581469fa..79ab659c70581 100644
--- a/lldb/source/API/SBProcess.cpp
+++ b/lldb/source/API/SBProcess.cpp
@@ -1354,6 +1354,15 @@ lldb::SBFileSpec SBProcess::GetCoreFile() {
   return SBFileSpec(core_file);
 }
 
+bool SBProcess::IsLiveDebugSession() const {
+  LLDB_INSTRUMENT_VA(this);
+
+  ProcessSP process_sp(GetSP());
+  if (!process_sp)
+    return false;
+  return process_sp->IsLiveDebugSession();
+}
+
 addr_t SBProcess::GetAddressMask(AddressMaskType type,
                                  AddressMaskRange addr_range) {
   LLDB_INSTRUMENT_VA(this, type, addr_range);

diff  --git a/lldb/test/API/functionalities/postmortem/elf-core/TestLinuxCore.py b/lldb/test/API/functionalities/postmortem/elf-core/TestLinuxCore.py
index 2fe56516d8727..0a5dc6e6a41a2 100644
--- a/lldb/test/API/functionalities/postmortem/elf-core/TestLinuxCore.py
+++ b/lldb/test/API/functionalities/postmortem/elf-core/TestLinuxCore.py
@@ -223,6 +223,15 @@ def test_read_memory(self):
         self.assertEqual(len(bytesread), 16)
         self.dbg.DeleteTarget(target)
 
+    @skipIfLLVMTargetMissing("X86")
+    def test_is_not_live_debug_session(self):
+        """Test that a process loaded from a core file is not a live session."""
+        target = self.dbg.CreateTarget("linux-x86_64.out")
+        process = target.LoadCore("linux-x86_64.core")
+        self.assertTrue(process, PROCESS_IS_VALID)
+        self.assertFalse(process.IsLiveDebugSession())
+        self.dbg.DeleteTarget(target)
+
     @skipIfLLVMTargetMissing("X86")
     def test_write_register(self):
         """Test that writing to register results in an error and that error

diff  --git a/lldb/test/API/python_api/process/TestProcessAPI.py b/lldb/test/API/python_api/process/TestProcessAPI.py
index 25f75fe68788a..6fb1c9247b291 100644
--- a/lldb/test/API/python_api/process/TestProcessAPI.py
+++ b/lldb/test/API/python_api/process/TestProcessAPI.py
@@ -29,6 +29,23 @@ def test_scripted_implementation(self):
         self.assertTrue(process, PROCESS_IS_VALID)
         self.assertEqual(process.GetScriptedImplementation(), None)
 
+    def test_is_live_debug_session(self):
+        """Test that a launched process reports as a live debug session."""
+        self.build()
+
+        (target, process, _, _) = lldbutil.run_to_source_breakpoint(
+            self, "Set break point", lldb.SBFileSpec("main.cpp")
+        )
+
+        self.assertTrue(process, PROCESS_IS_VALID)
+        self.assertTrue(process.IsLiveDebugSession())
+
+    def test_is_live_debug_session_invalid_process(self):
+        """Test that an invalid process is not reported as a live session."""
+        process = lldb.SBProcess()
+        self.assertFalse(process.IsValid())
+        self.assertFalse(process.IsLiveDebugSession())
+
     def test_read_memory(self):
         """Test Python SBProcess.ReadMemory() API."""
         self.build()


        


More information about the lldb-commits mailing list