[Lldb-commits] [PATCH] D134882: [lldb] Move breakpoint hit reset code to Target::CreateProcess

Pavel Labath via Phabricator via lldb-commits lldb-commits at lists.llvm.org
Thu Sep 29 07:50:49 PDT 2022


labath created this revision.
labath added reviewers: fdeazeve, jingham.
Herald added a project: All.
labath requested review of this revision.
Herald added a project: LLDB.

This ensures it is run regardless of the method we use to initiate the
session (previous version did not handle connects).


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D134882

Files:
  lldb/source/Target/Process.cpp
  lldb/source/Target/Target.cpp
  lldb/test/API/functionalities/gdb_remote_client/TestProcessConnect.py


Index: lldb/test/API/functionalities/gdb_remote_client/TestProcessConnect.py
===================================================================
--- lldb/test/API/functionalities/gdb_remote_client/TestProcessConnect.py
+++ lldb/test/API/functionalities/gdb_remote_client/TestProcessConnect.py
@@ -63,3 +63,54 @@
             self.dbg.GetSelectedTarget().GetProcess().Kill()
         lldbutil.expect_state_changes(self, self.dbg.GetListener(),
                                       self.process(), [lldb.eStateExited])
+    def test_breakpoint_count(self):
+        """
+        Test that breakpoint count gets reset for each new connection.
+        """
+        class MyResponder(MockGDBServerResponder):
+
+            def __init__(self):
+                super().__init__()
+                self.continued = False
+
+            def qfThreadInfo(self):
+                return "m47"
+
+            def qsThreadInfo(self):
+                return "l"
+
+            def setBreakpoint(self, packet):
+                return "OK"
+
+            def readRegister(self, reg):
+                # Pretend we're at the breakpoint after we've been resumed.
+                return "3412000000000000" if self.continued else "4747000000000000"
+
+            def cont(self):
+                self.continued = True
+                return "T05thread=47;reason:breakpoint"
+
+        # Connect to the first process and set our breakpoint.
+        self.server.responder = MyResponder()
+        target = self.createTarget("a.yaml")
+        process = self.connect(target)
+
+        bkpt = target.BreakpointCreateByAddress(0x1234)
+        self.assertTrue(bkpt.IsValid())
+        self.assertEqual(bkpt.GetNumLocations(), 1)
+
+        # "continue" the process. It should hit our breakpoint.
+        process.Continue()
+        self.assertState(process.GetState(), lldb.eStateStopped)
+        self.assertEqual(bkpt.GetHitCount(), 1)
+
+        # Now kill it, and connect again.
+        process.Kill()
+        self.server.stop()
+        self.server = MockGDBServer(self.server_socket_class())
+        self.server.start()
+
+        process = self.connect(target)
+
+        # The hit count should be reset.
+        self.assertEqual(bkpt.GetHitCount(), 0)
Index: lldb/source/Target/Target.cpp
===================================================================
--- lldb/source/Target/Target.cpp
+++ lldb/source/Target/Target.cpp
@@ -209,6 +209,7 @@
   if (!listener_sp)
     listener_sp = GetDebugger().GetListener();
   DeleteCurrentProcess();
+  ResetBreakpointHitCounts();
   m_process_sp = Process::FindPlugin(shared_from_this(), plugin_name,
                                      listener_sp, crash_file, can_connect);
   return m_process_sp;
Index: lldb/source/Target/Process.cpp
===================================================================
--- lldb/source/Target/Process.cpp
+++ lldb/source/Target/Process.cpp
@@ -2761,18 +2761,15 @@
 }
 
 Status Process::WillLaunch(Module *module) {
-  GetTarget().ResetBreakpointHitCounts();
   return DoWillLaunch(module);
 }
 
 Status Process::WillAttachToProcessWithID(lldb::pid_t pid) {
-  GetTarget().ResetBreakpointHitCounts();
   return DoWillAttachToProcessWithID(pid);
 }
 
 Status Process::WillAttachToProcessWithName(const char *process_name,
                                             bool wait_for_launch) {
-  GetTarget().ResetBreakpointHitCounts();
   return DoWillAttachToProcessWithName(process_name, wait_for_launch);
 }
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D134882.463899.patch
Type: text/x-patch
Size: 3489 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20220929/4ef60d76/attachment.bin>


More information about the lldb-commits mailing list