brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.5 KiB · 53147dc Raw
136 lines · python
1import lldb2import binascii3import os4from lldbsuite.test.lldbtest import *5from lldbsuite.test.decorators import *6from lldbsuite.test.gdbclientutils import *7from lldbsuite.test.lldbgdbclient import GDBRemoteTestBase8 9 10@skipIfRemote11class TestProcessConnect(GDBRemoteTestBase):12    NO_DEBUG_INFO_TESTCASE = True13 14    def test_gdb_remote_sync(self):15        """Test the gdb-remote command in synchronous mode"""16        try:17            self.dbg.SetAsync(False)18            self.expect(19                "gdb-remote " + self.server.get_connect_address(),20                substrs=["Process", "stopped"],21            )22        finally:23            self.dbg.GetSelectedTarget().GetProcess().Kill()24 25    def test_gdb_remote_async(self):26        """Test the gdb-remote command in asynchronous mode"""27        try:28            self.dbg.SetAsync(True)29            self.expect(30                "gdb-remote " + self.server.get_connect_address(),31                matching=False,32                substrs=["Process", "stopped"],33            )34            lldbutil.expect_state_changes(35                self, self.dbg.GetListener(), self.process(), [lldb.eStateStopped]36            )37        finally:38            self.dbg.GetSelectedTarget().GetProcess().Kill()39        lldbutil.expect_state_changes(40            self, self.dbg.GetListener(), self.process(), [lldb.eStateExited]41        )42 43    @skipIfWindows44    def test_process_connect_sync(self):45        """Test the gdb-remote command in synchronous mode"""46        try:47            self.dbg.SetAsync(False)48            self.expect(49                "platform select remote-gdb-server",50                substrs=["Platform: remote-gdb-server", "Connected: no"],51            )52            self.expect(53                "process connect " + self.server.get_connect_url(),54                substrs=["Process", "stopped"],55            )56        finally:57            self.dbg.GetSelectedTarget().GetProcess().Kill()58 59    @skipIfWindows60    def test_process_connect_async(self):61        """Test the gdb-remote command in asynchronous mode"""62        try:63            self.dbg.SetAsync(True)64            self.expect(65                "platform select remote-gdb-server",66                substrs=["Platform: remote-gdb-server", "Connected: no"],67            )68            self.expect(69                "process connect " + self.server.get_connect_url(),70                matching=False,71                substrs=["Process", "stopped"],72            )73            lldbutil.expect_state_changes(74                self, self.dbg.GetListener(), self.process(), [lldb.eStateStopped]75            )76        finally:77            self.dbg.GetSelectedTarget().GetProcess().Kill()78        lldbutil.expect_state_changes(79            self, self.dbg.GetListener(), self.process(), [lldb.eStateExited]80        )81 82    def test_breakpoint_count(self):83        """84        Test that breakpoint count gets reset for each new connection.85        """86 87        class MyResponder(MockGDBServerResponder):88            def __init__(self):89                super().__init__()90                self.continued = False91 92            def qfThreadInfo(self):93                return "m47"94 95            def qsThreadInfo(self):96                return "l"97 98            def setBreakpoint(self, packet):99                return "OK"100 101            def readRegister(self, reg):102                # Pretend we're at the breakpoint after we've been resumed.103                return "3412000000000000" if self.continued else "4747000000000000"104 105            def cont(self):106                self.continued = True107                return "T05thread=47;reason:breakpoint"108 109        # Connect to the first process and set our breakpoint.110        self.server.responder = MyResponder()111        target = self.createTarget("a.yaml")112        process = self.connect(target)113 114        bkpt = target.BreakpointCreateByAddress(0x1234)115        self.assertTrue(bkpt.IsValid())116        self.assertEqual(bkpt.GetNumLocations(), 1)117 118        # "continue" the process. It should hit our breakpoint.119        process.Continue()120        self.assertState(process.GetState(), lldb.eStateStopped)121        self.assertEqual(bkpt.GetHitCount(), 1)122 123        # Now kill it. The breakpoint should still show a hit count of one.124        process.Kill()125        self.server.stop()126        self.assertEqual(bkpt.GetHitCount(), 1)127 128        # Start over, and reconnect.129        self.server = MockGDBServer(self.server_socket_class())130        self.server.start()131 132        process = self.connect(target)133 134        # The hit count should be reset.135        self.assertEqual(bkpt.GetHitCount(), 0)136