summaryrefslogtreecommitdiffstats
path: root/Lib/bdb.py
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1999-01-25 20:51:34 (GMT)
committerGuido van Rossum <guido@python.org>1999-01-25 20:51:34 (GMT)
commit6ea27cc2c6659b040a16c829fa51a66eefc23925 (patch)
tree8012c4ddcf2e2f02d4ed35a33562d4576970f4d4 /Lib/bdb.py
parent3bbef60990583cb61e797ccf902a122ffa6c923a (diff)
downloadcpython-6ea27cc2c6659b040a16c829fa51a66eefc23925.zip
cpython-6ea27cc2c6659b040a16c829fa51a66eefc23925.tar.gz
cpython-6ea27cc2c6659b040a16c829fa51a66eefc23925.tar.bz2
Change clear_break() to the old signature clear_break(file, line).
Add new clear_bpbynumber() with single bpno argument. (Adapted from a patch by Richard Wolff.) Also some cleanup in error messages and moved some comments into a docstring.
Diffstat (limited to 'Lib/bdb.py')
-rw-r--r--Lib/bdb.py66
1 files changed, 40 insertions, 26 deletions
diff --git a/Lib/bdb.py b/Lib/bdb.py
index 9a15514..bc38607 100644
--- a/Lib/bdb.py
+++ b/Lib/bdb.py
@@ -1,10 +1,4 @@
-# A generic Python debugger base class.
-# This class takes care of details of the trace facility;
-# a derived class should implement user interaction.
-# There are two debuggers based upon this:
-# 'pdb', a text-oriented debugger not unlike dbx or gdb;
-# and 'wdb', a window-oriented debugger.
-# And of course... you can roll your own!
+# Debugger basics
import sys
import types
@@ -12,8 +6,15 @@ import types
BdbQuit = 'bdb.BdbQuit' # Exception to give up completely
-class Bdb: # Basic Debugger
+class Bdb:
+ """Generic Python debugger base class.
+
+ This class takes care of details of the trace facility;
+ a derived class should implement user interaction.
+ The standard debugger class (pdb.Pdb) is an example.
+ """
+
def __init__(self):
self.breaks = {}
@@ -193,40 +194,46 @@ class Bdb: # Basic Debugger
import linecache # Import as late as possible
line = linecache.getline(filename, lineno)
if not line:
- return 'That line does not exist!'
+ return 'Line %s:%d does not exist' % (filename,
+ lineno)
if not self.breaks.has_key(filename):
self.breaks[filename] = []
list = self.breaks[filename]
if not lineno in list:
list.append(lineno)
bp = Breakpoint(filename, lineno, temporary, cond)
- print 'Breakpoint %d, at %s:%d.' %(bp.number, filename, lineno)
- def clear_break(self, arg):
- try:
- number = int(arg)
- bp = Breakpoint.bpbynumber[int(arg)]
- except:
- return 'Invalid argument'
- if not bp:
- return 'Breakpoint already deleted'
- filename = bp.file
- lineno = bp.line
+ def clear_break(self, filename, lineno):
if not self.breaks.has_key(filename):
- return 'There are no breakpoints in that file!'
+ return 'There are no breakpoints in %s' % filename
if lineno not in self.breaks[filename]:
- return 'There is no breakpoint there!'
+ return 'There is no breakpoint at %s:%d' % (filename,
+ lineno)
# If there's only one bp in the list for that file,line
# pair, then remove the breaks entry
- if len(Breakpoint.bplist[filename, lineno]) == 1:
+ for bp in Breakpoint.bplist[filename, lineno][:]:
+ bp.deleteMe()
+ if not Breakpoint.bplist.has_key((filename, lineno)):
self.breaks[filename].remove(lineno)
if not self.breaks[filename]:
del self.breaks[filename]
- bp.deleteMe()
+ def clear_bpbynumber(self, arg):
+ try:
+ number = int(arg)
+ except:
+ return 'Non-numeric breakpoint number (%s)' % arg
+ try:
+ bp = Breakpoint.bpbynumber[number]
+ except IndexError:
+ return 'Breakpoint number (%d) out of range' % number
+ if not bp:
+ return 'Breakpoint (%d) already deleted' % number
+ self.clear_break(bp.file, bp.line)
+
def clear_all_file_breaks(self, filename):
if not self.breaks.has_key(filename):
- return 'There are no breakpoints in that file!'
+ return 'There are no breakpoints in %s' % filename
for line in self.breaks[filename]:
blist = Breakpoint.bplist[filename, line]
for bp in blist:
@@ -235,7 +242,7 @@ class Bdb: # Basic Debugger
def clear_all_breaks(self):
if not self.breaks:
- return 'There are no breakpoints!'
+ return 'There are no breakpoints'
for bp in Breakpoint.bpbynumber:
if bp:
bp.deleteMe()
@@ -245,6 +252,11 @@ class Bdb: # Basic Debugger
return self.breaks.has_key(filename) and \
lineno in self.breaks[filename]
+ def get_breaks(self, filename, lineno):
+ return self.breaks.has_key(filename) and \
+ lineno in self.breaks[filename] and \
+ Breakpoint.bplist[filename, line] or []
+
def get_file_breaks(self, filename):
if self.breaks.has_key(filename):
return self.breaks[filename]
@@ -381,6 +393,8 @@ class Breakpoint:
"""
+ # XXX Keeping state in the class is a mistake -- this means
+ # you cannot have more than one active Bdb instance.
next = 1 # Next bp to be assigned
bplist = {} # indexed by (file, lineno) tuple