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 _______________________________________________ lldb-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
