Skip to content

Commit cd6b2ce

Browse files
gh-80675: Set f_trace_lines = True on all frames upon pdb.set_trace() (#110881)
1 parent 9573d14 commit cd6b2ce

File tree

3 files changed

+32
-0
lines changed

3 files changed

+32
-0
lines changed

Lib/bdb.py

+7
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ def __init__(self, skip=None):
3232
self.skip = set(skip) if skip else None
3333
self.breaks = {}
3434
self.fncache = {}
35+
self.frame_trace_lines = {}
3536
self.frame_returning = None
3637

3738
self._load_breaks()
@@ -331,6 +332,9 @@ def set_trace(self, frame=None):
331332
while frame:
332333
frame.f_trace = self.trace_dispatch
333334
self.botframe = frame
335+
# We need f_trace_liens == True for the debugger to work
336+
self.frame_trace_lines[frame] = frame.f_trace_lines
337+
frame.f_trace_lines = True
334338
frame = frame.f_back
335339
self.set_step()
336340
sys.settrace(self.trace_dispatch)
@@ -349,6 +353,9 @@ def set_continue(self):
349353
while frame and frame is not self.botframe:
350354
del frame.f_trace
351355
frame = frame.f_back
356+
for frame, prev_trace_lines in self.frame_trace_lines.items():
357+
frame.f_trace_lines = prev_trace_lines
358+
self.frame_trace_lines = {}
352359

353360
def set_quit(self):
354361
"""Set quitting attribute to True.

Lib/test/test_pdb.py

+24
Original file line numberDiff line numberDiff line change
@@ -2350,6 +2350,30 @@ def test_pdb_ambiguous_statements():
23502350
(Pdb) continue
23512351
"""
23522352

2353+
def test_pdb_f_trace_lines():
2354+
"""GH-80675
2355+
2356+
pdb should work even if f_trace_lines is set to False on some frames.
2357+
2358+
>>> reset_Breakpoint()
2359+
2360+
>>> def test_function():
2361+
... import sys
2362+
... frame = sys._getframe()
2363+
... frame.f_trace_lines = False
2364+
... import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace()
2365+
... if frame.f_trace_lines != False:
2366+
... print("f_trace_lines is not reset after continue!")
2367+
2368+
>>> with PdbTestInput([ # doctest: +NORMALIZE_WHITESPACE
2369+
... 'continue'
2370+
... ]):
2371+
... test_function()
2372+
> <doctest test.test_pdb.test_pdb_f_trace_lines[1]>(6)test_function()
2373+
-> if frame.f_trace_lines != False:
2374+
(Pdb) continue
2375+
"""
2376+
23532377
def test_pdb_function_break():
23542378
"""Testing the line number of break on function
23552379
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Set ``f_trace_lines = True`` on all frames upon :func:`pdb.set_trace()`

0 commit comments

Comments
 (0)