continue out of a loop in pdb

R. Bernstein rocky at panix.com
Wed May 24 05:35:15 CEST 2006


Here's the revision I just made for pydb's documentation (in
CVS). I welcome suggestions for improvement.


set_trace([cmdfile=None])

    Enter the debugger before the statement which follows (in
    execution) the set_trace() statement. This hard-codes a call to
    the debugger at a given point in a program, even if the code is
    not otherwise being debugged. For example you might want to do
    this when an assertion fails.  

    It is useful in a couple of other situations. First, there may be
    some problem in getting the debugger to stop at this particular
    place for whatever reason (like flakiness in the
    debugger). Alternatively, using the debugger and setting a
    breakpoint can slow down a program a bit. But if you use this
    instead, the code will run as though the debugger is not present
    until you reach this point in the program.

    When the debugger is quitting, this causes the program to be
    terminated. If you want the program to continue instead, use the
    debugger function.



> "Diez B. Roggisch" <deets at nospam.web.de> writes:
> 
> > > the code works with no problem, I am playing around with the pdb, i.e
> > > ****************
> > > from pdb import *
> > > set_trace() for i in range(1,500000):
> > >     print i
> > > print "tired of this"
> > > print "I am out"
> > > ****************
> > > fred at debian:~/python/practic$ python practic.py
> > >> /home/fred/python/practic/practic.py(4)?()
> > > -> for i in range(1,500000):
> > > (Pdb) n
> > >> /home/fred/python/practic/practic.py(5)?()
> > > -> print i
> > > (Pdb) n
> > > 1
> > >> /home/fred/python/practic/practic.py(4)?()
> > > -> for i in range(1,500000):
> > > (Pdb) b 6
> > > Breakpoint 1 at /home/fred/python/practic/practic.py:6
> > > (Pdb) c
> > >> /home/fred/python/practic/practic.py(5)?()
> > > -> print i <<<< I expected (print "tired of this")
> > > (Pdb)
> > 
> > 
> > In TFM it says that set_trace() puts a breakpoint to the current
> > frame. I admit that I also wouldn't read that as "each and every
> > instruction in this very frame", but that is what essentially
> > happens. I think the docs could need some enhancement here. Try
> > debugging a called function, there things will work as expected.
> 
> Let me try to explain my understanding here. set_trace() merely tells
> the Python interpreter to call the debugger dispatcher after the call
> to set_trace() finishes. In effect this is at the next statement of
> your program because the caller frame here is always the "set_trace()"
> call you put in your program. Okay, so now we've called this "debugger
> dispatcher" thing and what does that do? Well, it accepts commands
> from you, like "next" or "step" or "continue". .
> 
> In the case above, Python was told to make that set-trace call 500000
> times.
> 
> But yes, I agree the wording in in the pdb (and pydb) manuals are
> written too much from view of someone writing a debugger rather than
> someone using it.  If you or someone else wantsto make a suggestion as
> to how to make the description of set_trace() more user friendly (and I
> don't think the above explanation succeeds), I'll put it in the next
> release of pydb (http://bashdb.sourceforge.net/pydb) which probably
> will be in the not-too distant future.



More information about the Python-list mailing list