From dcbf1b94c6b3b24f3d9690820ba596317bbcd61c Mon Sep 17 00:00:00 2001 From: Neal Norwitz Date: Wed, 29 May 2002 01:17:47 +0000 Subject: [PATCH] Backport fix by tismer for #210682 fixed an old buglet that caused bdb to be unable to continue in the botframe, after a breakpoint was set. the key idea is not to set botframe to the bottom level frame, but its f_back, which actually might be None. Additional changes: migrated old exception trick to use sys._getframe(), which exists both in 2.1 and 2.2 . Note: I believe Mark Hammond needs to look over his code now. F5 correctly starts up in the debugger, but later on doesn't stop at a given breakpoint any longer. kind regards - chris --- Lib/bdb.py | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/Lib/bdb.py b/Lib/bdb.py index f5fcb4259903..b2d3d25e4bfd 100644 --- a/Lib/bdb.py +++ b/Lib/bdb.py @@ -64,7 +64,7 @@ class Bdb: # XXX 'arg' is no longer used if self.botframe is None: # First call of dispatch since reset() - self.botframe = frame + self.botframe = frame.f_back # (CT) Note that this may also be None! return self.trace_dispatch if not (self.stop_here(frame) or self.break_anywhere(frame)): # No need to trace this function @@ -90,8 +90,8 @@ class Bdb: # definition of stopping and breakpoints. def stop_here(self, frame): - if self.stopframe is None: - return 1 + # (CT) stopframe may now also be None, see dispatch_call. + # (CT) the former test for None is therefore removed from here. if frame is self.stopframe: return 1 while frame is not None and frame is not self.stopframe: @@ -168,10 +168,7 @@ class Bdb: def set_trace(self): """Start debugging from here.""" - try: - 1 + '' - except: - frame = sys.exc_info()[2].tb_frame.f_back + frame = sys._getframe().f_back self.reset() while frame: frame.f_trace = self.trace_dispatch @@ -188,10 +185,7 @@ class Bdb: if not self.breaks: # no breakpoints; run without debugger overhead sys.settrace(None) - try: - 1 + '' # raise an exception - except: - frame = sys.exc_info()[2].tb_frame.f_back + frame = sys._getframe().f_back while frame and frame is not self.botframe: del frame.f_trace frame = frame.f_back -- 2.47.3