Files
clang-p2996/lldb/test/API/functionalities/gdb_remote_client/TestProcessConnect.py
Jonas Devlieghere 2238dcc393 [NFC][Py Reformat] Reformat python files in lldb
This is an ongoing series of commits that are reformatting our Python
code. Reformatting is done with `black` (23.1.0).

If you end up having problems merging this commit because you have made
changes to a python file, the best way to handle that is to run `git
checkout --ours <yourfile>` and then reformat it with black.

RFC: https://discourse.llvm.org/t/rfc-document-and-standardize-python-code-style

Differential revision: https://reviews.llvm.org/D151460
2023-05-25 12:54:09 -07:00

136 lines
4.5 KiB
Python

import lldb
import binascii
import os
from lldbsuite.test.lldbtest import *
from lldbsuite.test.decorators import *
from lldbsuite.test.gdbclientutils import *
from lldbsuite.test.lldbgdbclient import GDBRemoteTestBase
@skipIfRemote
class TestProcessConnect(GDBRemoteTestBase):
NO_DEBUG_INFO_TESTCASE = True
def test_gdb_remote_sync(self):
"""Test the gdb-remote command in synchronous mode"""
try:
self.dbg.SetAsync(False)
self.expect(
"gdb-remote " + self.server.get_connect_address(),
substrs=["Process", "stopped"],
)
finally:
self.dbg.GetSelectedTarget().GetProcess().Kill()
def test_gdb_remote_async(self):
"""Test the gdb-remote command in asynchronous mode"""
try:
self.dbg.SetAsync(True)
self.expect(
"gdb-remote " + self.server.get_connect_address(),
matching=False,
substrs=["Process", "stopped"],
)
lldbutil.expect_state_changes(
self, self.dbg.GetListener(), self.process(), [lldb.eStateStopped]
)
finally:
self.dbg.GetSelectedTarget().GetProcess().Kill()
lldbutil.expect_state_changes(
self, self.dbg.GetListener(), self.process(), [lldb.eStateExited]
)
@skipIfWindows
def test_process_connect_sync(self):
"""Test the gdb-remote command in synchronous mode"""
try:
self.dbg.SetAsync(False)
self.expect(
"platform select remote-gdb-server",
substrs=["Platform: remote-gdb-server", "Connected: no"],
)
self.expect(
"process connect " + self.server.get_connect_url(),
substrs=["Process", "stopped"],
)
finally:
self.dbg.GetSelectedTarget().GetProcess().Kill()
@skipIfWindows
def test_process_connect_async(self):
"""Test the gdb-remote command in asynchronous mode"""
try:
self.dbg.SetAsync(True)
self.expect(
"platform select remote-gdb-server",
substrs=["Platform: remote-gdb-server", "Connected: no"],
)
self.expect(
"process connect " + self.server.get_connect_url(),
matching=False,
substrs=["Process", "stopped"],
)
lldbutil.expect_state_changes(
self, self.dbg.GetListener(), self.process(), [lldb.eStateStopped]
)
finally:
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. The breakpoint should still show a hit count of one.
process.Kill()
self.server.stop()
self.assertEqual(bkpt.GetHitCount(), 1)
# Start over, and reconnect.
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)