[Lldb-commits] [lldb] [lldb-dap] Fix logpoint to breakpoint conversion (PR #222906)
via lldb-commits
lldb-commits at lists.llvm.org
Fri Sep 11 02:58:08 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-lldb
Author: Sergei Druzhkov (DrSergei)
<details>
<summary>Changes</summary>
When user sets logpoint and after that removes `logMessage`, which implicitly converts it to usual breakpoint, breakpoint still has `BreakpointHitCallback`, which leads to missed stops.
---
Full diff: https://github.com/llvm/llvm-project/pull/222906.diff
2 Files Affected:
- (modified) lldb/test/API/tools/lldb-dap/breakpoint/TestDAP_logpoints.py (+63)
- (modified) lldb/tools/lldb-dap/SourceBreakpoint.cpp (+5)
``````````diff
diff --git a/lldb/test/API/tools/lldb-dap/breakpoint/TestDAP_logpoints.py b/lldb/test/API/tools/lldb-dap/breakpoint/TestDAP_logpoints.py
index 635387f593cf7..527b6d90314ee 100644
--- a/lldb/test/API/tools/lldb-dap/breakpoint/TestDAP_logpoints.py
+++ b/lldb/test/API/tools/lldb-dap/breakpoint/TestDAP_logpoints.py
@@ -78,6 +78,69 @@ def test_logMessage_basic(self):
)
session.continue_to_exit()
+ def check_logpoint_to_breakpoint_conversion(self, log_message):
+ session = self.build_and_create_session()
+ initial_stop = self.stop_at_before_loop_line(session)
+ loop_line = line_number("main.cpp", "// break loop")
+ after_loop_line = line_number("main.cpp", "// after loop")
+ log_prefix = "This is log message for "
+
+ [logpoint_id, post_loop_breakpoint_id] = session.resolve_source_breakpoints(
+ self.main_path,
+ [
+ SourceBreakpoint(loop_line, logMessage=log_prefix + "{i}"),
+ SourceBreakpoint(after_loop_line),
+ ],
+ )
+
+ # Change logpoint to usual breakpoint and check that id preserved.
+ [breakpoint_id, _] = session.resolve_source_breakpoints(
+ self.main_path,
+ [
+ SourceBreakpoint(loop_line, logMessage=log_message),
+ SourceBreakpoint(after_loop_line),
+ ],
+ )
+ self.assertEqual(breakpoint_id, logpoint_id)
+
+ # Check that stop works as expected for updated logpoint.
+ loop_stop = session.continue_to_breakpoint(breakpoint_id)
+ frame = session.top_frame_from(loop_stop)
+ self.assertEqual(frame.locals["i"].value_as_int, 0)
+ captured = session.collect_console(after=initial_stop, until=loop_stop)
+ self.assertNotIn(log_prefix, captured.seen_texts)
+
+ # Change breakpoint to logpoint back.
+ [restored_id, _] = session.resolve_source_breakpoints(
+ self.main_path,
+ [
+ SourceBreakpoint(loop_line, logMessage=log_prefix + "{i}"),
+ SourceBreakpoint(after_loop_line),
+ ],
+ )
+ self.assertEqual(restored_id, logpoint_id)
+
+ # Check that logpoint prints messages.
+ post_loop_stop = session.continue_to_breakpoint(post_loop_breakpoint_id)
+ captured = session.collect_console(after=loop_stop, until=post_loop_stop)
+ messages = [
+ line
+ for line in captured.seen_texts.splitlines()
+ if line.startswith(log_prefix)
+ ]
+ self.assertEqual(messages, [log_prefix + str(i) for i in range(1, 10)])
+ session.continue_to_exit()
+
+ @skipIfWindows
+ def test_logmessage_none(self):
+ """Tests removing logMessage restores a stopping breakpoint."""
+ self.check_logpoint_to_breakpoint_conversion(None)
+
+ @skipIfWindows
+ def test_logmessage_empty(self):
+ """Tests clearing logMessage restores a stopping breakpoint."""
+ self.check_logpoint_to_breakpoint_conversion("")
+
@skipIfWindows
def test_logmessage_advanced(self):
"""Tests breakpoint logmessage functionality for complex expression."""
diff --git a/lldb/tools/lldb-dap/SourceBreakpoint.cpp b/lldb/tools/lldb-dap/SourceBreakpoint.cpp
index fbc995e8a6e3f..e44ac6bfb1785 100644
--- a/lldb/tools/lldb-dap/SourceBreakpoint.cpp
+++ b/lldb/tools/lldb-dap/SourceBreakpoint.cpp
@@ -281,6 +281,11 @@ lldb::SBError SourceBreakpoint::FormatLogText(llvm::StringRef text,
void SourceBreakpoint::SetLogMessage() {
m_log_message_parts.clear();
+ if (m_log_message.empty()) {
+ m_bp.SetCallback(nullptr, nullptr);
+ return;
+ }
+
// Contains unmatched open curly braces indices.
std::vector<int> unmatched_curly_braces;
``````````
</details>
https://github.com/llvm/llvm-project/pull/222906
More information about the lldb-commits
mailing list