[Lldb-commits] [lldb] [lldb] Add bidirectional packetLog to gdbclientutils.py (PR #162176)
Daniel Sanders via lldb-commits
lldb-commits at lists.llvm.org
Fri Oct 17 17:03:22 PDT 2025
https://github.com/dsandersllvm updated https://github.com/llvm/llvm-project/pull/162176
>From 3e2d2ba20b3b7f77a01d1c4ef4ec322e5f03906e Mon Sep 17 00:00:00 2001
From: Daniel Sanders <daniel_l_sanders at apple.com>
Date: Mon, 13 Oct 2025 10:55:18 -0700
Subject: [PATCH 1/4] [lldb] Add type hints to gdbclientutils.py and fix issues
Everything in this should be python 3.9. The docs say the minimum is 3.8
but there's existing code in this suite that needs 3.9 so I think 3.9 is
ok.
Issues:
qEcho() is passed an argument by the callers that the function didn't have
Several functions in the base class would silently do nothing if not
overriden. These now use @abstractmethod to require overrides
sendall() had inconsistent return types between overrides
---
lldb/packages/Python/lldbsuite/test/gdbclientutils.py | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/lldb/packages/Python/lldbsuite/test/gdbclientutils.py b/lldb/packages/Python/lldbsuite/test/gdbclientutils.py
index 1a2860a327439..4f9de90944bb1 100644
--- a/lldb/packages/Python/lldbsuite/test/gdbclientutils.py
+++ b/lldb/packages/Python/lldbsuite/test/gdbclientutils.py
@@ -6,7 +6,7 @@
import socket
import traceback
from lldbsuite.support import seven
-from typing import Optional, List, Tuple
+from typing import Optional, List, Tuple, Literal
def checksum(message):
@@ -520,10 +520,12 @@ class MockGDBServer:
_receivedData = None
_receivedDataOffset = None
_shouldSendAck = True
+ packetLog: list[tuple[Literal["recv"] | Literal["send"], str | bytes]]
def __init__(self, socket):
self._socket = socket
self.responder = MockGDBServerResponder()
+ self.packetLog = []
def start(self):
# Start a thread that waits for a client connection.
@@ -650,11 +652,13 @@ def _parsePacket(self):
# can start on the next packet the next time around
self._receivedData = data[i:]
self._receivedDataOffset = 0
+ self.packetLog.append(("recv", packet))
return packet
def _sendPacket(self, packet: str):
assert self._socket is not None
framed_packet = seven.bitcast_to_bytes(frame_packet(packet))
+ self.packetLog.append(("send", framed_packet))
self._socket.sendall(framed_packet)
def _handlePacket(self, packet):
>From 98806319807eb02f888b6e62462ce18e130f3252 Mon Sep 17 00:00:00 2001
From: Daniel Sanders <daniel_l_sanders at apple.com>
Date: Mon, 13 Oct 2025 12:55:45 -0700
Subject: [PATCH 2/4] [lldb] Make MockGDBServerResponder return consistent
types
It used return either:
* str
* The RESPONSE_DISCONNECT class
* The RESPONSE_NONE class
* A list of the above three
it now returns:
* A list of str or SpecialResponse instances
---
.../Python/lldbsuite/test/gdbclientutils.py | 30 +++++++++++++------
1 file changed, 21 insertions(+), 9 deletions(-)
diff --git a/lldb/packages/Python/lldbsuite/test/gdbclientutils.py b/lldb/packages/Python/lldbsuite/test/gdbclientutils.py
index 4f9de90944bb1..ff45c6770e13c 100644
--- a/lldb/packages/Python/lldbsuite/test/gdbclientutils.py
+++ b/lldb/packages/Python/lldbsuite/test/gdbclientutils.py
@@ -5,8 +5,9 @@
import threading
import socket
import traceback
+from enum import Enum
from lldbsuite.support import seven
-from typing import Optional, List, Tuple, Literal
+from typing import Optional, List, Tuple, Literal, Union, Sequence
def checksum(message):
@@ -90,21 +91,28 @@ class MockGDBServerResponder:
registerCount: int = 40
- class RESPONSE_DISCONNECT:
- pass
-
- class RESPONSE_NONE:
- pass
+ class SpecialResponse(Enum):
+ RESPONSE_DISCONNECT = 0
+ RESPONSE_NONE = 1
+ RESPONSE_DISCONNECT = SpecialResponse.RESPONSE_DISCONNECT
+ RESPONSE_NONE = SpecialResponse.RESPONSE_NONE
+ type Response = Union[str, SpecialResponse]
def __init__(self):
self.packetLog: List[str] = []
- def respond(self, packet):
+ def respond(self, packet: str) -> Sequence[Response]:
"""
Return the unframed packet data that the server should issue in response
to the given packet received from the client.
"""
self.packetLog.append(packet)
+ response = self._respond_impl(packet)
+ if not isinstance(response, list):
+ response = [response]
+ return response
+
+ def _respond_impl(self, packet) -> Union[Response, List[Response]]:
if packet is MockGDBServer.PACKET_INTERRUPT:
return self.interrupt()
if packet == "c":
@@ -668,17 +676,19 @@ def _handlePacket(self, packet):
# adding validation code to make sure the client only sends ACKs
# when it's supposed to.
return
- response = ""
+ response = [""]
# We'll handle the ack stuff here since it's not something any of the
# tests will be concerned about, and it'll get turned off quickly anyway.
if self._shouldSendAck:
self._socket.sendall(seven.bitcast_to_bytes("+"))
if packet == "QStartNoAckMode":
self._shouldSendAck = False
- response = "OK"
+ response = ["OK"]
elif self.responder is not None:
# Delegate everything else to our responder
response = self.responder.respond(packet)
+ # MockGDBServerResponder no longer returns non-lists but others like
+ # ReverseTestBase still do
if not isinstance(response, list):
response = [response]
for part in response:
@@ -686,6 +696,8 @@ def _handlePacket(self, packet):
continue
if part is MockGDBServerResponder.RESPONSE_DISCONNECT:
raise self.TerminateConnectionException()
+ # Should have handled the non-str's above
+ assert isinstance(part, str)
self._sendPacket(part)
PACKET_ACK = object()
>From aa4c9b47bb5e5d41220357ab2be21b260330d87e Mon Sep 17 00:00:00 2001
From: Daniel Sanders <daniel_l_sanders at apple.com>
Date: Mon, 13 Oct 2025 12:56:47 -0700
Subject: [PATCH 3/4] [lldb] Renamed assertPacketLogContains to
assertPacketLogReceived
The docstring is currently wrong about the packet log containing both sent
and received packets. This will be corrected in the next commit at which
point this function will be filtering to the received packets for
compatibility
---
.../Python/lldbsuite/test/lldbgdbclient.py | 8 +++----
.../gdb_remote_client/TestContinue.py | 6 ++---
.../gdb_remote_client/TestGDBRemoteClient.py | 12 +++++-----
.../gdb_remote_client/TestGDBRemoteLoad.py | 4 ++--
.../TestGDBRemotePlatformFile.py | 22 +++++++++----------
5 files changed, 26 insertions(+), 26 deletions(-)
diff --git a/lldb/packages/Python/lldbsuite/test/lldbgdbclient.py b/lldb/packages/Python/lldbsuite/test/lldbgdbclient.py
index 599f7878e6edb..44ae12d180be5 100644
--- a/lldb/packages/Python/lldbsuite/test/lldbgdbclient.py
+++ b/lldb/packages/Python/lldbsuite/test/lldbgdbclient.py
@@ -10,7 +10,7 @@ class GDBRemoteTestBase(TestBase):
Base class for GDB client tests.
This class will setup and start a mock GDB server for the test to use.
- It also provides assertPacketLogContains, which simplifies the checking
+ It also provides assertPacketLogReceived, which simplifies the checking
of packets sent by the client.
"""
@@ -60,12 +60,12 @@ def connect(self, target, plugin="gdb-remote"):
self.assertTrue(process, PROCESS_IS_VALID)
return process
- def assertPacketLogContains(self, packets, log=None):
+ def assertPacketLogReceived(self, packets, log=None):
"""
- Assert that the mock server's packet log contains the given packets.
+ Assert that the mock server's packet log received the given packets.
The packet log includes all packets sent by the client and received
- by the server. This fuction makes it easy to verify that the client
+ by the server. This function makes it easy to verify that the client
sent the expected packets to the server.
The check does not require that the packets be consecutive, but does
diff --git a/lldb/test/API/functionalities/gdb_remote_client/TestContinue.py b/lldb/test/API/functionalities/gdb_remote_client/TestContinue.py
index 3af4ca859f86e..67f0783167a32 100644
--- a/lldb/test/API/functionalities/gdb_remote_client/TestContinue.py
+++ b/lldb/test/API/functionalities/gdb_remote_client/TestContinue.py
@@ -41,7 +41,7 @@ def qfThreadInfo(self):
lldbutil.expect_state_changes(
self, self.dbg.GetListener(), process, [lldb.eStateExited]
)
- self.assertPacketLogContains(["vCont;C13:401"])
+ self.assertPacketLogReceived(["vCont;C13:401"])
def test_continue_no_vCont(self):
class MyResponder(self.BaseResponder):
@@ -61,7 +61,7 @@ def other(self, packet):
lldbutil.expect_state_changes(
self, self.dbg.GetListener(), process, [lldb.eStateExited]
)
- self.assertPacketLogContains(["Hc401", "C13"])
+ self.assertPacketLogReceived(["Hc401", "C13"])
def test_continue_multiprocess(self):
class MyResponder(self.BaseResponder):
@@ -74,4 +74,4 @@ class MyResponder(self.BaseResponder):
lldbutil.expect_state_changes(
self, self.dbg.GetListener(), process, [lldb.eStateExited]
)
- self.assertPacketLogContains(["vCont;C13:p400.401"])
+ self.assertPacketLogReceived(["vCont;C13:p400.401"])
diff --git a/lldb/test/API/functionalities/gdb_remote_client/TestGDBRemoteClient.py b/lldb/test/API/functionalities/gdb_remote_client/TestGDBRemoteClient.py
index 67c5d7d55846d..01dbf8f50be39 100644
--- a/lldb/test/API/functionalities/gdb_remote_client/TestGDBRemoteClient.py
+++ b/lldb/test/API/functionalities/gdb_remote_client/TestGDBRemoteClient.py
@@ -36,7 +36,7 @@ def test_connect(self):
"""Test connecting to a remote gdb server"""
target = self.createTarget("a.yaml")
process = self.connect(target)
- self.assertPacketLogContains(["qProcessInfo", "qfThreadInfo"])
+ self.assertPacketLogReceived(["qProcessInfo", "qfThreadInfo"])
def test_attach_fail(self):
error_msg = "mock-error-msg"
@@ -291,7 +291,7 @@ def qLaunchSuccess(self):
self.assertTrue(process, PROCESS_IS_VALID)
self.assertEqual(process.GetProcessID(), 16)
- self.assertPacketLogContains(
+ self.assertPacketLogReceived(
[
"A%d,0,%s,8,1,61726731,8,2,61726732,8,3,61726733"
% (len(exe_hex), exe_hex),
@@ -352,7 +352,7 @@ def A(self, packet):
self.assertTrue(process, PROCESS_IS_VALID)
self.assertEqual(process.GetProcessID(), 16)
- self.assertPacketLogContains(
+ self.assertPacketLogReceived(
["vRun;%s;61726731;61726732;61726733" % (exe_hex,)]
)
@@ -424,7 +424,7 @@ def A(self, packet):
self.assertTrue(process, PROCESS_IS_VALID)
self.assertEqual(process.GetProcessID(), 16)
- self.assertPacketLogContains(
+ self.assertPacketLogReceived(
["vRun;%s;61726731;61726732;61726733" % (exe_hex,)]
)
@@ -468,7 +468,7 @@ def vRun(self, packet):
lldb.SBError(),
) # error
- self.assertPacketLogContains(
+ self.assertPacketLogReceived(
[
"QEnvironment:EQUALS=foo=bar",
"QEnvironmentHexEncoded:4e45454453454e433d66726f6224",
@@ -522,7 +522,7 @@ def QEnvironment(self, packet):
lldb.SBError(),
) # error
- self.assertPacketLogContains(
+ self.assertPacketLogReceived(
[
"QEnvironmentHexEncoded:455155414c533d666f6f3d626172",
"QEnvironmentHexEncoded:4e45454453454e433d66726f6224",
diff --git a/lldb/test/API/functionalities/gdb_remote_client/TestGDBRemoteLoad.py b/lldb/test/API/functionalities/gdb_remote_client/TestGDBRemoteLoad.py
index f0a5429e6c1ce..d8214ae6b9a2d 100644
--- a/lldb/test/API/functionalities/gdb_remote_client/TestGDBRemoteLoad.py
+++ b/lldb/test/API/functionalities/gdb_remote_client/TestGDBRemoteLoad.py
@@ -22,7 +22,7 @@ def test_ram_load(self):
target = self.createTarget("a.yaml")
process = self.connect(target)
self.dbg.HandleCommand("target modules load -l -s0")
- self.assertPacketLogContains(["M1000,4:c3c3c3c3", "M1004,2:3232"])
+ self.assertPacketLogReceived(["M1000,4:c3c3c3c3", "M1004,2:3232"])
@skipIfXmlSupportMissing
def test_flash_load(self):
@@ -63,7 +63,7 @@ def other(self, packet):
target = self.createTarget("a.yaml")
process = self.connect(target)
self.dbg.HandleCommand("target modules load -l -s0")
- self.assertPacketLogContains(
+ self.assertPacketLogReceived(
[
"vFlashErase:1000,100",
"vFlashWrite:1000:\xc3\xc3\xc3\xc3",
diff --git a/lldb/test/API/functionalities/gdb_remote_client/TestGDBRemotePlatformFile.py b/lldb/test/API/functionalities/gdb_remote_client/TestGDBRemotePlatformFile.py
index 69e04df81bc6e..a3def8165586a 100644
--- a/lldb/test/API/functionalities/gdb_remote_client/TestGDBRemotePlatformFile.py
+++ b/lldb/test/API/functionalities/gdb_remote_client/TestGDBRemotePlatformFile.py
@@ -30,7 +30,7 @@ def vFile(self, packet):
)
self.match("platform file write 16 -o 11 -d teststring", [r"Return = 10"])
self.match("platform file close 16", [r"file 16 closed."])
- self.assertPacketLogContains(
+ self.assertPacketLogReceived(
[
"vFile:open:2f736f6d652f66696c652e747874,00000202,000001ed",
"vFile:pread:10,d,b",
@@ -66,7 +66,7 @@ def vFile(self, packet):
error=True,
)
self.match("platform file close 16", [enosys_regex], error=True)
- self.assertPacketLogContains(
+ self.assertPacketLogReceived(
[
"vFile:open:2f736f6d652f66696c652e747874,00000202,000001ed",
"vFile:pread:10,d,b",
@@ -88,7 +88,7 @@ def vFile(self, packet):
"platform get-size /some/file.txt",
[r"File size of /some/file\.txt \(remote\): 4096"],
)
- self.assertPacketLogContains(
+ self.assertPacketLogReceived(
[
"vFile:size:2f736f6d652f66696c652e747874",
]
@@ -113,7 +113,7 @@ def vFile(self, packet):
"platform get-size /some/file.txt",
[r"File size of /some/file\.txt \(remote\): 66051"],
)
- self.assertPacketLogContains(
+ self.assertPacketLogReceived(
[
"vFile:size:2f736f6d652f66696c652e747874",
"vFile:open:2f736f6d652f66696c652e747874,00000000,00000000",
@@ -135,7 +135,7 @@ def vFile(self, packet):
[r"File size of /other/file\.txt \(remote\): 66051"],
)
- self.assertPacketLogContains(
+ self.assertPacketLogReceived(
[
"vFile:size:2f6f746865722f66696c652e747874",
"vFile:open:2f6f746865722f66696c652e747874,00000000,00000000",
@@ -161,7 +161,7 @@ def vFile(self, packet):
"platform get-permissions /some/file.txt",
[r"File permissions of /some/file\.txt \(remote\): 0o0644"],
)
- self.assertPacketLogContains(
+ self.assertPacketLogReceived(
[
"vFile:mode:2f736f6d652f66696c652e747874",
]
@@ -190,7 +190,7 @@ def vFile(self, packet):
"platform get-permissions /some/file.txt",
[r"File permissions of /some/file\.txt \(remote\): 0o0644"],
)
- self.assertPacketLogContains(
+ self.assertPacketLogReceived(
[
"vFile:mode:2f736f6d652f66696c652e747874",
"vFile:open:2f736f6d652f66696c652e747874,00000000,00000000",
@@ -214,7 +214,7 @@ def vFile(self, packet):
"platform file-exists /some/file.txt",
[r"File /some/file\.txt \(remote\) exists"],
)
- self.assertPacketLogContains(
+ self.assertPacketLogReceived(
[
"vFile:exists:2f736f6d652f66696c652e747874",
]
@@ -233,7 +233,7 @@ def vFile(self, packet):
"platform file-exists /some/file.txt",
[r"File /some/file\.txt \(remote\) does not exist"],
)
- self.assertPacketLogContains(
+ self.assertPacketLogReceived(
[
"vFile:exists:2f736f6d652f66696c652e747874",
]
@@ -256,7 +256,7 @@ def vFile(self, packet):
"platform file-exists /some/file.txt",
[r"File /some/file\.txt \(remote\) exists"],
)
- self.assertPacketLogContains(
+ self.assertPacketLogReceived(
[
"vFile:exists:2f736f6d652f66696c652e747874",
"vFile:open:2f736f6d652f66696c652e747874,00000000,00000000",
@@ -279,7 +279,7 @@ def vFile(self, packet):
"platform file-exists /some/file.txt",
[r"File /some/file\.txt \(remote\) does not exist"],
)
- self.assertPacketLogContains(
+ self.assertPacketLogReceived(
[
"vFile:exists:2f736f6d652f66696c652e747874",
"vFile:open:2f736f6d652f66696c652e747874,00000000,00000000",
>From 96de96a03e74dd8376e27fe0f38198c7288f443f Mon Sep 17 00:00:00 2001
From: Daniel Sanders <daniel_l_sanders at apple.com>
Date: Mon, 13 Oct 2025 13:05:36 -0700
Subject: [PATCH 4/4] fixup: Merge the MockGDBServer packetLog into the
existing MockGDBServerResponder's packetLog
---
.../Python/lldbsuite/test/gdbclientutils.py | 39 +++++++++++++++----
.../Python/lldbsuite/test/lldbgdbclient.py | 12 +++---
.../gdb_remote_client/TestGDBRemoteClient.py | 24 +++++++-----
3 files changed, 53 insertions(+), 22 deletions(-)
diff --git a/lldb/packages/Python/lldbsuite/test/gdbclientutils.py b/lldb/packages/Python/lldbsuite/test/gdbclientutils.py
index ff45c6770e13c..b2e71a84fb407 100644
--- a/lldb/packages/Python/lldbsuite/test/gdbclientutils.py
+++ b/lldb/packages/Python/lldbsuite/test/gdbclientutils.py
@@ -7,7 +7,7 @@
import traceback
from enum import Enum
from lldbsuite.support import seven
-from typing import Optional, List, Tuple, Literal, Union, Sequence
+from typing import Optional, List, Tuple, Union, Sequence
def checksum(message):
@@ -77,6 +77,31 @@ def hex_decode_bytes(hex_bytes):
return out
+class PacketDirection(Enum):
+ RECV = "recv"
+ SEND = "send"
+
+
+class PacketLog:
+ def __init__(self):
+ self._packets: list[tuple[PacketDirection, str]] = []
+
+ def add_sent(self, packet: str):
+ self._packets.append((PacketDirection.SEND, packet))
+
+ def add_received(self, packet: str):
+ self._packets.append((PacketDirection.RECV, packet))
+
+ def get_sent(self):
+ return [pkt for direction, pkt in self._packets if direction == PacketDirection.SEND]
+
+ def get_received(self):
+ return [pkt for direction, pkt in self._packets if direction == PacketDirection.RECV]
+
+ def __iter__(self):
+ return iter(self._packets)
+
+
class MockGDBServerResponder:
"""
A base class for handling client packets and issuing server responses for
@@ -99,17 +124,21 @@ class SpecialResponse(Enum):
type Response = Union[str, SpecialResponse]
def __init__(self):
- self.packetLog: List[str] = []
+ self.packetLog = PacketLog()
def respond(self, packet: str) -> Sequence[Response]:
"""
Return the unframed packet data that the server should issue in response
to the given packet received from the client.
"""
- self.packetLog.append(packet)
+ self.packetLog.add_received(packet)
response = self._respond_impl(packet)
if not isinstance(response, list):
response = [response]
+ for part in response:
+ if isinstance(part, self.SpecialResponse):
+ continue
+ self.packetLog.add_sent(part)
return response
def _respond_impl(self, packet) -> Union[Response, List[Response]]:
@@ -528,12 +557,10 @@ class MockGDBServer:
_receivedData = None
_receivedDataOffset = None
_shouldSendAck = True
- packetLog: list[tuple[Literal["recv"] | Literal["send"], str | bytes]]
def __init__(self, socket):
self._socket = socket
self.responder = MockGDBServerResponder()
- self.packetLog = []
def start(self):
# Start a thread that waits for a client connection.
@@ -660,13 +687,11 @@ def _parsePacket(self):
# can start on the next packet the next time around
self._receivedData = data[i:]
self._receivedDataOffset = 0
- self.packetLog.append(("recv", packet))
return packet
def _sendPacket(self, packet: str):
assert self._socket is not None
framed_packet = seven.bitcast_to_bytes(frame_packet(packet))
- self.packetLog.append(("send", framed_packet))
self._socket.sendall(framed_packet)
def _handlePacket(self, packet):
diff --git a/lldb/packages/Python/lldbsuite/test/lldbgdbclient.py b/lldb/packages/Python/lldbsuite/test/lldbgdbclient.py
index 44ae12d180be5..e30da108c9086 100644
--- a/lldb/packages/Python/lldbsuite/test/lldbgdbclient.py
+++ b/lldb/packages/Python/lldbsuite/test/lldbgdbclient.py
@@ -60,7 +60,7 @@ def connect(self, target, plugin="gdb-remote"):
self.assertTrue(process, PROCESS_IS_VALID)
return process
- def assertPacketLogReceived(self, packets, log=None):
+ def assertPacketLogReceived(self, packets, log: PacketLog=None):
"""
Assert that the mock server's packet log received the given packets.
@@ -72,18 +72,20 @@ def assertPacketLogReceived(self, packets, log=None):
require that they are ordered in the log as they ordered in the arg.
"""
if log is None:
- log = self.server.responder.packetLog
+ received = self.server.responder.packetLog.get_received()
+ else:
+ received = log.get_received()
i = 0
j = 0
- while i < len(packets) and j < len(log):
- if log[j] == packets[i]:
+ while i < len(packets) and j < len(received):
+ if received[j] == packets[i]:
i += 1
j += 1
if i < len(packets):
self.fail(
"Did not receive: %s\nLast 10 packets:\n\t%s"
- % (packets[i], "\n\t".join(log))
+ % (packets[i], "\n\t".join(received))
)
diff --git a/lldb/test/API/functionalities/gdb_remote_client/TestGDBRemoteClient.py b/lldb/test/API/functionalities/gdb_remote_client/TestGDBRemoteClient.py
index 01dbf8f50be39..b86416f0b2477 100644
--- a/lldb/test/API/functionalities/gdb_remote_client/TestGDBRemoteClient.py
+++ b/lldb/test/API/functionalities/gdb_remote_client/TestGDBRemoteClient.py
@@ -142,15 +142,16 @@ def test_read_registers_using_g_packets(self):
# But there certainly should be no p packets after the g packet.
self.read_registers(process)
- print(f"\nPACKET LOG:\n{self.server.responder.packetLog}\n")
+ received = self.server.responder.packetLog.get_received()
+ print(f"\nPACKET LOG:\n{received}\n")
g_pos = 0
try:
- g_pos = self.server.responder.packetLog.index("g")
+ g_pos = received.index("g")
except err:
self.fail("'g' packet not found after fetching registers")
try:
- second_g = self.server.responder.packetLog.index("g", g_pos)
+ second_g = received.index("g", g_pos + 1)
self.fail("Found more than one 'g' packet")
except:
pass
@@ -161,7 +162,7 @@ def test_read_registers_using_g_packets(self):
len(
[
p
- for p in self.server.responder.packetLog[g_pos:]
+ for p in received[g_pos:]
if p.startswith("p")
]
),
@@ -177,9 +178,10 @@ def test_read_registers_using_p_packets(self):
process = self.connect(target)
self.read_registers(process)
- self.assertNotIn("g", self.server.responder.packetLog)
+ received = self.server.responder.packetLog.get_received()
+ self.assertNotIn("g", received)
self.assertGreater(
- len([p for p in self.server.responder.packetLog if p.startswith("p")]), 0
+ len([p for p in received if p.startswith("p")]), 0
)
def test_write_registers_using_P_packets(self):
@@ -189,11 +191,12 @@ def test_write_registers_using_P_packets(self):
process = self.connect(target)
self.write_registers(process)
+ received = self.server.responder.packetLog.get_received()
self.assertEqual(
- 0, len([p for p in self.server.responder.packetLog if p.startswith("G")])
+ 0, len([p for p in received if p.startswith("G")])
)
self.assertGreater(
- len([p for p in self.server.responder.packetLog if p.startswith("P")]), 0
+ len([p for p in received if p.startswith("P")]), 0
)
def test_write_registers_using_G_packets(self):
@@ -209,11 +212,12 @@ def readRegister(self, register):
process = self.connect(target)
self.write_registers(process)
+ received = self.server.responder.packetLog.get_received()
self.assertEqual(
- 0, len([p for p in self.server.responder.packetLog if p.startswith("P")])
+ 0, len([p for p in received if p.startswith("P")])
)
self.assertGreater(
- len([p for p in self.server.responder.packetLog if p.startswith("G")]), 0
+ len([p for p in received if p.startswith("G")]), 0
)
def read_registers(self, process):
More information about the lldb-commits
mailing list