summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorChristian Tismer <tismer@stackless.com>2002-05-28 08:04:00 (GMT)
committerChristian Tismer <tismer@stackless.com>2002-05-28 08:04:00 (GMT)
commit313a7513b0c5771042d850d70782a2448d1cdcb7 (patch)
treec6ef8a458900ef778d90da931b769aaa35fe7dbb /Lib
parent72de9c7a9c06bfe498c04ef134f510c51a5aef98 (diff)
downloadcpython-313a7513b0c5771042d850d70782a2448d1cdcb7.zip
cpython-313a7513b0c5771042d850d70782a2448d1cdcb7.tar.gz
cpython-313a7513b0c5771042d850d70782a2448d1cdcb7.tar.bz2
This is a Python 2.1 and 2.2 bugfix candidate:
(or how do I "mark" something to be a candidate?) 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
Diffstat (limited to 'Lib')
-rw-r--r--Lib/bdb.py16
1 files changed, 5 insertions, 11 deletions
diff --git a/Lib/bdb.py b/Lib/bdb.py
index d0c738f..adeab1b 100644
--- a/Lib/bdb.py
+++ b/Lib/bdb.py
@@ -65,7 +65,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
@@ -91,8 +91,8 @@ class Bdb:
# definition of stopping and breakpoints.
def stop_here(self, frame):
- if self.stopframe is None:
- return True
+ # (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 True
while frame is not None and frame is not self.stopframe:
@@ -169,10 +169,7 @@ class Bdb:
def set_trace(self):
"""Start debugging from here."""
- try:
- raise Exception
- 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
@@ -189,10 +186,7 @@ class Bdb:
if not self.breaks:
# no breakpoints; run without debugger overhead
sys.settrace(None)
- try:
- raise 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