diff --git a/Lib/bdb.py b/Lib/bdb.py --- a/Lib/bdb.py +++ b/Lib/bdb.py @@ -70,7 +70,10 @@ # XXX 'arg' is no longer used if self.botframe is None: # First call of dispatch since reset() - self.botframe = frame.f_back # (CT) Note that this may also be None! + # Note that frame may be a debugger frame. The derived class must + # ensure that self.botframe is a debuggee frame and not a debugger + # frame. + self.botframe = frame return self.trace_dispatch if not (self.stop_here(frame) or self.break_anywhere(frame)): # No need to trace this function diff --git a/Lib/pdb.py b/Lib/pdb.py --- a/Lib/pdb.py +++ b/Lib/pdb.py @@ -193,9 +193,9 @@ raise KeyboardInterrupt self.message("\nProgram interrupted. (Use 'cont' to resume).") self.set_step() - self.set_trace(frame) # restore previous signal handler signal.signal(signal.SIGINT, self._previous_sigint_handler) + sys.settrace(self.trace_dispatch) def reset(self): bdb.Bdb.reset(self) @@ -261,6 +261,7 @@ if (self.mainpyfile != self.canonic(frame.f_code.co_filename) or frame.f_lineno <= 0): return + self.botframe = frame self._wait_for_mainpyfile = False if self.bp_commands(frame): self.interaction(frame, None)