self.skip = set(skip) if skip else None
self.breaks = {}
self.fncache = {}
+ self.frame_trace_lines = {}
self.frame_returning = None
self._load_breaks()
while frame:
frame.f_trace = self.trace_dispatch
self.botframe = frame
+ # We need f_trace_liens == True for the debugger to work
+ self.frame_trace_lines[frame] = frame.f_trace_lines
+ frame.f_trace_lines = True
frame = frame.f_back
self.set_step()
sys.settrace(self.trace_dispatch)
while frame and frame is not self.botframe:
del frame.f_trace
frame = frame.f_back
+ for frame, prev_trace_lines in self.frame_trace_lines.items():
+ frame.f_trace_lines = prev_trace_lines
+ self.frame_trace_lines = {}
def set_quit(self):
"""Set quitting attribute to True.
(Pdb) continue
"""
+def test_pdb_f_trace_lines():
+ """GH-80675
+
+ pdb should work even if f_trace_lines is set to False on some frames.
+
+ >>> reset_Breakpoint()
+
+ >>> def test_function():
+ ... import sys
+ ... frame = sys._getframe()
+ ... frame.f_trace_lines = False
+ ... import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace()
+ ... if frame.f_trace_lines != False:
+ ... print("f_trace_lines is not reset after continue!")
+
+ >>> with PdbTestInput([ # doctest: +NORMALIZE_WHITESPACE
+ ... 'continue'
+ ... ]):
+ ... test_function()
+ > <doctest test.test_pdb.test_pdb_f_trace_lines[1]>(6)test_function()
+ -> if frame.f_trace_lines != False:
+ (Pdb) continue
+ """
+
def test_pdb_function_break():
"""Testing the line number of break on function