mirror of
https://github.com/python/cpython.git
synced 2025-08-04 08:59:19 +00:00
issue13183 - Fix pdb skipping frames after hitting a breakpoint and running step. Patch by Xavier de Gaye
This commit is contained in:
commit
417c3848d5
3 changed files with 68 additions and 1 deletions
|
@ -5,6 +5,7 @@ import pdb
|
|||
import sys
|
||||
import unittest
|
||||
import subprocess
|
||||
import textwrap
|
||||
|
||||
from test import support
|
||||
# This little helper class is essential for testing pdb under doctest.
|
||||
|
@ -598,6 +599,22 @@ def test_pdb_run_with_code_object():
|
|||
|
||||
class PdbTestCase(unittest.TestCase):
|
||||
|
||||
def run_pdb(self, script, commands):
|
||||
"""Run 'script' lines with pdb and the pdb 'commands'."""
|
||||
filename = 'main.py'
|
||||
with open(filename, 'w') as f:
|
||||
f.write(textwrap.dedent(script))
|
||||
cmd = [sys.executable, '-m', 'pdb', filename]
|
||||
stdout = stderr = None
|
||||
with subprocess.Popen(cmd, stdout=subprocess.PIPE,
|
||||
stdin=subprocess.PIPE,
|
||||
stderr=subprocess.STDOUT,
|
||||
) as proc:
|
||||
stdout, stderr = proc.communicate(str.encode(commands))
|
||||
stdout = stdout and bytes.decode(stdout)
|
||||
stderr = stderr and bytes.decode(stderr)
|
||||
return stdout, stderr
|
||||
|
||||
def test_issue7964(self):
|
||||
# open the file as binary so we can force \r\n newline
|
||||
with open(support.TESTFN, 'wb') as f:
|
||||
|
@ -613,6 +630,40 @@ class PdbTestCase(unittest.TestCase):
|
|||
self.assertNotIn(b'SyntaxError', stdout,
|
||||
"Got a syntax error running test script under PDB")
|
||||
|
||||
def test_issue13183(self):
|
||||
script = """
|
||||
from bar import bar
|
||||
|
||||
def foo():
|
||||
bar()
|
||||
|
||||
def nope():
|
||||
pass
|
||||
|
||||
def foobar():
|
||||
foo()
|
||||
nope()
|
||||
|
||||
foobar()
|
||||
"""
|
||||
commands = """
|
||||
from bar import bar
|
||||
break bar
|
||||
continue
|
||||
step
|
||||
step
|
||||
quit
|
||||
"""
|
||||
bar = """
|
||||
def bar():
|
||||
print('1')
|
||||
"""
|
||||
with open('bar.py', 'w') as f:
|
||||
f.write(textwrap.dedent(bar))
|
||||
stdout, stderr = self.run_pdb(script, commands)
|
||||
self.assertIn('main.py(5)foo()->None', stdout.split('\n')[-3],
|
||||
'Fail to step into the caller after a return')
|
||||
|
||||
def tearDown(self):
|
||||
support.unlink(support.TESTFN)
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue