diff --git a/Lib/test/test_remote_pdb.py b/Lib/test/test_remote_pdb.py index cc0ada12814afd..d3267be79ece0e 100644 --- a/Lib/test/test_remote_pdb.py +++ b/Lib/test/test_remote_pdb.py @@ -20,6 +20,17 @@ from pdb import _PdbServer, _PdbClient +@contextmanager +def kill_on_error(proc): + """Context manager killing the subprocess if a Python exception is raised.""" + with proc: + try: + yield proc + except: + proc.kill() + raise + + class MockSocketFile: """Mock socket file for testing _PdbServer without actual socket connections.""" @@ -360,7 +371,7 @@ def test_connect_and_basic_commands(self): self._create_script() process, client_file = self._connect_and_get_client_file() - with process: + with kill_on_error(process): # We should receive initial data from the debugger data = client_file.readline() initial_data = json.loads(data.decode()) @@ -413,7 +424,7 @@ def test_breakpoints(self): """Test setting and hitting breakpoints.""" self._create_script() process, client_file = self._connect_and_get_client_file() - with process: + with kill_on_error(process): # Skip initial messages until we get to the prompt self._read_until_prompt(client_file) @@ -489,8 +500,7 @@ def bar(): self._create_script(script=script) process, client_file = self._connect_and_get_client_file() - with process: - + with kill_on_error(process): # Skip initial messages until we get to the prompt self._read_until_prompt(client_file) @@ -520,7 +530,7 @@ def test_handle_eof(self): self._create_script() process, client_file = self._connect_and_get_client_file() - with process: + with kill_on_error(process): # Skip initial messages until we get to the prompt self._read_until_prompt(client_file) @@ -568,7 +578,7 @@ def run_test(): self._create_script(script=script) process, client_file = self._connect_and_get_client_file() - with process: + with kill_on_error(process): # First message should be an error about protocol version mismatch data = client_file.readline() message = json.loads(data.decode()) @@ -591,7 +601,7 @@ def test_help_system(self): self._create_script() process, client_file = self._connect_and_get_client_file() - with process: + with kill_on_error(process): # Skip initial messages until we get to the prompt self._read_until_prompt(client_file) @@ -630,7 +640,7 @@ def test_multi_line_commands(self): self._create_script() process, client_file = self._connect_and_get_client_file() - with process: + with kill_on_error(process): # Skip initial messages until we get to the prompt self._read_until_prompt(client_file)