Skip to content

Commit 982830c

Browse files
authored
gh-133490: Add color support to remote PDB (#133491)
1 parent 57c9810 commit 982830c

File tree

3 files changed

+30
-3
lines changed

3 files changed

+30
-3
lines changed

Lib/pdb.py

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2677,6 +2677,7 @@ def __init__(
26772677
sockfile,
26782678
signal_server=None,
26792679
owns_sockfile=True,
2680+
colorize=False,
26802681
**kwargs,
26812682
):
26822683
self._owns_sockfile = owns_sockfile
@@ -2687,7 +2688,10 @@ def __init__(
26872688
if signal_server:
26882689
# Only started by the top level _PdbServer, not recursive ones.
26892690
self._start_signal_listener(signal_server)
2691+
# Override the `colorize` attribute set by the parent constructor,
2692+
# because it checks the server's stdout, rather than the client's.
26902693
super().__init__(colorize=False, **kwargs)
2694+
self.colorize = colorize
26912695

26922696
@staticmethod
26932697
def protocol_version():
@@ -2975,7 +2979,11 @@ def do_interact(self, arg):
29752979

29762980
@typing.override
29772981
def _create_recursive_debugger(self):
2978-
return _PdbServer(self._sockfile, owns_sockfile=False)
2982+
return _PdbServer(
2983+
self._sockfile,
2984+
owns_sockfile=False,
2985+
colorize=self.colorize,
2986+
)
29792987

29802988
@typing.override
29812989
def _prompt_for_confirmation(self, prompt, default):
@@ -3336,7 +3344,16 @@ def complete(self, text, state):
33363344
return None
33373345

33383346

3339-
def _connect(*, host, port, frame, commands, version, signal_raising_thread):
3347+
def _connect(
3348+
*,
3349+
host,
3350+
port,
3351+
frame,
3352+
commands,
3353+
version,
3354+
signal_raising_thread,
3355+
colorize,
3356+
):
33403357
with closing(socket.create_connection((host, port))) as conn:
33413358
sockfile = conn.makefile("rwb")
33423359

@@ -3347,7 +3364,11 @@ def _connect(*, host, port, frame, commands, version, signal_raising_thread):
33473364
else:
33483365
signal_server = None
33493366

3350-
remote_pdb = _PdbServer(sockfile, signal_server=signal_server)
3367+
remote_pdb = _PdbServer(
3368+
sockfile,
3369+
signal_server=signal_server,
3370+
colorize=colorize,
3371+
)
33513372
weakref.finalize(remote_pdb, sockfile.close)
33523373

33533374
if Pdb._last_pdb_instance is not None:
@@ -3379,6 +3400,7 @@ def attach(pid, commands=()):
33793400
)
33803401

33813402
use_signal_thread = sys.platform == "win32"
3403+
colorize = _colorize.can_colorize()
33823404

33833405
connect_script.write(
33843406
textwrap.dedent(
@@ -3391,6 +3413,7 @@ def attach(pid, commands=()):
33913413
commands={json.dumps("\n".join(commands))},
33923414
version={_PdbServer.protocol_version()},
33933415
signal_raising_thread={use_signal_thread!r},
3416+
colorize={colorize!r},
33943417
)
33953418
"""
33963419
)

Lib/test/test_remote_pdb.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1040,6 +1040,7 @@ def dummy_function():
10401040
commands="",
10411041
version=pdb._PdbServer.protocol_version(),
10421042
signal_raising_thread=False,
1043+
colorize=False,
10431044
)
10441045
return x # This line won't be reached in debugging
10451046
@@ -1210,6 +1211,7 @@ def bar():
12101211
commands="",
12111212
version=pdb._PdbServer.protocol_version(),
12121213
signal_raising_thread=True,
1214+
colorize=False,
12131215
)
12141216
print("Connected to debugger")
12151217
iterations = 50
@@ -1301,6 +1303,7 @@ def run_test():
13011303
commands="",
13021304
version=fake_version,
13031305
signal_raising_thread=False,
1306+
colorize=False,
13041307
)
13051308
13061309
# This should print if the debugger detaches correctly
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Add color support to PDB in remote mode.

0 commit comments

Comments
 (0)