[Lldb-commits] [PATCH] D110878: [lldb] Add a gdb_remote_client test for connecting to pty [WIP]

Pavel Labath via Phabricator via lldb-commits lldb-commits at lists.llvm.org
Fri Oct 1 01:19:31 PDT 2021


labath added a comment.

In D110878#3034748 <https://reviews.llvm.org/D110878#3034748>, @mgorny wrote:

> @labath, this is the part where I ask for help ;-).
>
>   An exception happened when receiving the response from the gdb server. Closing the client...
>   Traceback (most recent call last):
>     File "/home/mgorny/git/llvm-project/lldb/test/API/functionalities/gdb_remote_client/gdbclientutils.py", line 405, in _run
>       data = seven.bitcast_to_string(self._client.recv(4096))
>     File "/home/mgorny/git/llvm-project/lldb/test/API/functionalities/gdb_remote_client/gdbclientutils.py", line 538, in recv
>       return self.read(size)
>   OSError: [Errno 5] Input/output error
>   PASS: LLDB (/home/mgorny/git/llvm-project/build/bin/clang-x86_64) :: test_process_connect_sync_dwarf (TestPty.TestPty)
>
> I think it's getting in the 'controlling terminal' magic and getting EIO when lldb finishes or sth like that. Any suggestion how to avoid this exception?

Catch it and turn it into EOF? (btw, I've found this link <https://unix.stackexchange.com/questions/538198/why-blocking-read-on-a-pty-returns-when-process-on-the-other-end-dies> to be pretty good at explaining the behavior across different OSs.)



================
Comment at: lldb/test/API/functionalities/gdb_remote_client/gdbclientutils.py:530-535
+    def accept(self):
+        return self, ''
+
+    def close(self):
+        # the socket is reused, so don't close it yet
+        pass
----------------
I think it would be cleaner if we had like a single new interface, which describes what to we expect of the connection, and then a socket- and pty-based implementation of that interface.


================
Comment at: lldb/test/API/functionalities/gdb_remote_client/gdbclientutils.py:560-564
+    def get_connect_address(self):
+        libc = ctypes.CDLL(None)
+        libc.ptsname.argtypes = (ctypes.c_int,)
+        libc.ptsname.restype = ctypes.c_char_p
+        return libc.ptsname(self._master).decode()
----------------
I'm wondering if we should have an overload of SBTarget::ConnectRemote that accepts a file descriptor (or SBFile, SBCommunication, ...).

This would make the socket case easier as well, and it seems like it could be generally useful.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D110878/new/

https://reviews.llvm.org/D110878



More information about the lldb-commits mailing list