[llvm-branch-commits] [lldb] [lldb] Fix delayed breakpoints on running processes (PR #198747)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Wed May 20 04:13:49 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-lldb
Author: Felipe de Azevedo Piovezan (felipepiovezan)
<details>
<summary>Changes</summary>
Breakpoints should never be delayed on a running process, as they can immediately affect program execution.
---
Full diff: https://github.com/llvm/llvm-project/pull/198747.diff
4 Files Affected:
- (modified) lldb/source/Target/Process.cpp (+3)
- (added) lldb/test/API/functionalities/breakpoint/breakpoint_while_running/Makefile (+3)
- (added) lldb/test/API/functionalities/breakpoint/breakpoint_while_running/TestBreakpointWhileRunning.py (+26)
- (added) lldb/test/API/functionalities/breakpoint/breakpoint_while_running/main.c (+8)
``````````diff
diff --git a/lldb/source/Target/Process.cpp b/lldb/source/Target/Process.cpp
index d0711bb36ebff..6467671e2d2ca 100644
--- a/lldb/source/Target/Process.cpp
+++ b/lldb/source/Target/Process.cpp
@@ -1601,6 +1601,9 @@ Status Process::DisableBreakpointSiteByID(lldb::user_id_t break_id) {
llvm::Error Process::ExecuteBreakpointSiteAction(BreakpointSite &site,
BreakpointAction action,
bool do_it_now) {
+ // Breakpoints immediately affect running processes, so do not delay them.
+ do_it_now |= IsRunning();
+
if (do_it_now)
if (llvm::Error E = FlushDelayedBreakpoints())
LLDB_LOG_ERROR(
diff --git a/lldb/test/API/functionalities/breakpoint/breakpoint_while_running/Makefile b/lldb/test/API/functionalities/breakpoint/breakpoint_while_running/Makefile
new file mode 100644
index 0000000000000..10495940055b6
--- /dev/null
+++ b/lldb/test/API/functionalities/breakpoint/breakpoint_while_running/Makefile
@@ -0,0 +1,3 @@
+C_SOURCES := main.c
+
+include Makefile.rules
diff --git a/lldb/test/API/functionalities/breakpoint/breakpoint_while_running/TestBreakpointWhileRunning.py b/lldb/test/API/functionalities/breakpoint/breakpoint_while_running/TestBreakpointWhileRunning.py
new file mode 100644
index 0000000000000..b478be689a46d
--- /dev/null
+++ b/lldb/test/API/functionalities/breakpoint/breakpoint_while_running/TestBreakpointWhileRunning.py
@@ -0,0 +1,26 @@
+"""
+Test inserting a breakpoint while inferior is executing.
+"""
+
+import lldb
+from lldbsuite.test.lldbtest import TestBase
+from lldbsuite.test import lldbutil
+
+
+class BreakpointWhileRunning(TestBase):
+ NO_DEBUG_INFO_TESTCASE = True
+
+ def test_breakpoint_while_running(self):
+ self.build()
+ target, process, thread, bkpt = lldbutil.run_to_source_breakpoint(
+ self, "main", lldb.SBFileSpec("main.c")
+ )
+
+ self.dbg.SetAsync(True)
+ listener = self.dbg.GetListener()
+ self.runCmd("break delete --force")
+ self.runCmd("continue")
+ lldbutil.expect_state_changes(self, listener, process, [lldb.eStateRunning])
+ self.runCmd("break set --source-pattern-regexp 'break here'")
+ lldbutil.expect_state_changes(self, listener, process, [lldb.eStateStopped])
+ self.runCmd("process status")
diff --git a/lldb/test/API/functionalities/breakpoint/breakpoint_while_running/main.c b/lldb/test/API/functionalities/breakpoint/breakpoint_while_running/main.c
new file mode 100644
index 0000000000000..ff22dc074854d
--- /dev/null
+++ b/lldb/test/API/functionalities/breakpoint/breakpoint_while_running/main.c
@@ -0,0 +1,8 @@
+#include <unistd.h>
+
+int main()
+{
+ int count = 100;
+ while (count--)
+ sleep (1); // break here
+}
``````````
</details>
https://github.com/llvm/llvm-project/pull/198747
More information about the llvm-branch-commits
mailing list