Support for conditional breakpoints (Jim Fulton, with some changes).
diff --git a/Lib/pdb.py b/Lib/pdb.py
index 42080cc..ec6a2ab 100755
--- a/Lib/pdb.py
+++ b/Lib/pdb.py
@@ -96,27 +96,39 @@
print self.get_all_breaks() # XXX
return
# Try line number as argument
+ try:
+ arg = eval(arg, self.curframe.f_globals,
+ self.curframe.f_locals)
+ except:
+ print '*** Could not eval argument:', arg
+ return
+
+ # Check for condition
+ try: arg, cond = arg
+ except: arg, cond = arg, None
+
try:
- lineno = int(eval(arg))
+ lineno = int(arg)
filename = self.curframe.f_code.co_filename
except:
# Try function name as the argument
import codehack
try:
- func = eval(arg, self.curframe.f_globals,
- self.curframe.f_locals)
+ func = arg
if hasattr(func, 'im_func'):
func = func.im_func
code = func.func_code
except:
- print '*** Could not eval argument:', arg
+ print '*** The specified object',
+ print 'is not a function', arg
return
lineno = codehack.getlineno(code)
filename = code.co_filename
# now set the break point
- err = self.set_break(filename, lineno)
+ err = self.set_break(filename, lineno, cond)
if err: print '***', err
+
do_b = do_break
def do_clear(self, arg):
@@ -352,10 +364,13 @@
self.help_b()
def help_b(self):
- print """b(reak) [lineno | function]
+ print """b(reak) [lineno | function] [, "condition"]
With a line number argument, set a break there in the current
file. With a function name, set a break at the entry of that
- function. Without argument, list all breaks."""
+ function. Without argument, list all breaks. If a second
+ argument is present, it is a string specifying an expression
+ which must evaluate to true before the breakpoint is honored.
+ """
def help_clear(self):
self.help_cl()