mirror of
https://github.com/python/cpython.git
synced 2025-08-04 17:08:35 +00:00
gh-133490: Add color support to remote PDB (#133491)
This commit is contained in:
parent
57c9810ba4
commit
982830ce56
3 changed files with 30 additions and 3 deletions
29
Lib/pdb.py
29
Lib/pdb.py
|
@ -2677,6 +2677,7 @@ class _PdbServer(Pdb):
|
|||
sockfile,
|
||||
signal_server=None,
|
||||
owns_sockfile=True,
|
||||
colorize=False,
|
||||
**kwargs,
|
||||
):
|
||||
self._owns_sockfile = owns_sockfile
|
||||
|
@ -2687,7 +2688,10 @@ class _PdbServer(Pdb):
|
|||
if signal_server:
|
||||
# Only started by the top level _PdbServer, not recursive ones.
|
||||
self._start_signal_listener(signal_server)
|
||||
# Override the `colorize` attribute set by the parent constructor,
|
||||
# because it checks the server's stdout, rather than the client's.
|
||||
super().__init__(colorize=False, **kwargs)
|
||||
self.colorize = colorize
|
||||
|
||||
@staticmethod
|
||||
def protocol_version():
|
||||
|
@ -2975,7 +2979,11 @@ class _PdbServer(Pdb):
|
|||
|
||||
@typing.override
|
||||
def _create_recursive_debugger(self):
|
||||
return _PdbServer(self._sockfile, owns_sockfile=False)
|
||||
return _PdbServer(
|
||||
self._sockfile,
|
||||
owns_sockfile=False,
|
||||
colorize=self.colorize,
|
||||
)
|
||||
|
||||
@typing.override
|
||||
def _prompt_for_confirmation(self, prompt, default):
|
||||
|
@ -3336,7 +3344,16 @@ class _PdbClient:
|
|||
return None
|
||||
|
||||
|
||||
def _connect(*, host, port, frame, commands, version, signal_raising_thread):
|
||||
def _connect(
|
||||
*,
|
||||
host,
|
||||
port,
|
||||
frame,
|
||||
commands,
|
||||
version,
|
||||
signal_raising_thread,
|
||||
colorize,
|
||||
):
|
||||
with closing(socket.create_connection((host, port))) as conn:
|
||||
sockfile = conn.makefile("rwb")
|
||||
|
||||
|
@ -3347,7 +3364,11 @@ def _connect(*, host, port, frame, commands, version, signal_raising_thread):
|
|||
else:
|
||||
signal_server = None
|
||||
|
||||
remote_pdb = _PdbServer(sockfile, signal_server=signal_server)
|
||||
remote_pdb = _PdbServer(
|
||||
sockfile,
|
||||
signal_server=signal_server,
|
||||
colorize=colorize,
|
||||
)
|
||||
weakref.finalize(remote_pdb, sockfile.close)
|
||||
|
||||
if Pdb._last_pdb_instance is not None:
|
||||
|
@ -3379,6 +3400,7 @@ def attach(pid, commands=()):
|
|||
)
|
||||
|
||||
use_signal_thread = sys.platform == "win32"
|
||||
colorize = _colorize.can_colorize()
|
||||
|
||||
connect_script.write(
|
||||
textwrap.dedent(
|
||||
|
@ -3391,6 +3413,7 @@ def attach(pid, commands=()):
|
|||
commands={json.dumps("\n".join(commands))},
|
||||
version={_PdbServer.protocol_version()},
|
||||
signal_raising_thread={use_signal_thread!r},
|
||||
colorize={colorize!r},
|
||||
)
|
||||
"""
|
||||
)
|
||||
|
|
|
@ -1040,6 +1040,7 @@ class PdbConnectTestCase(unittest.TestCase):
|
|||
commands="",
|
||||
version=pdb._PdbServer.protocol_version(),
|
||||
signal_raising_thread=False,
|
||||
colorize=False,
|
||||
)
|
||||
return x # This line won't be reached in debugging
|
||||
|
||||
|
@ -1210,6 +1211,7 @@ class PdbConnectTestCase(unittest.TestCase):
|
|||
commands="",
|
||||
version=pdb._PdbServer.protocol_version(),
|
||||
signal_raising_thread=True,
|
||||
colorize=False,
|
||||
)
|
||||
print("Connected to debugger")
|
||||
iterations = 50
|
||||
|
@ -1301,6 +1303,7 @@ class PdbConnectTestCase(unittest.TestCase):
|
|||
commands="",
|
||||
version=fake_version,
|
||||
signal_raising_thread=False,
|
||||
colorize=False,
|
||||
)
|
||||
|
||||
# This should print if the debugger detaches correctly
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Add color support to PDB in remote mode.
|
Loading…
Add table
Add a link
Reference in a new issue