469,315 Members | 1,580 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,315 developers. It's quick & easy.

continue out of a loop in pdb

Hi

using the debugger, I happen to be on a line inside a loop, after
looping few times with "n" and wanting to get out of the loop to the
next line, I set a break point on a line after the loop structure and
hit c, that does not continue out of the loop and stop at the break
line, how is it down, I read the ref docs on pdb but could not figure
it out.

thanks
May 14 '06 #1
6 8874
"Gary Wessle" <ph****@yahoo.com> wrote in message
news:87************@localhost.localdomain...
Hi

using the debugger, I happen to be on a line inside a loop, after
looping few times with "n" and wanting to get out of the loop to the
next line, I set a break point on a line after the loop structure and
hit c, that does not continue out of the loop and stop at the break
line, how is it down, I read the ref docs on pdb but could not figure
it out.

thanks


This is exactly how I do this operation using pdb, and it works for me, so
you are on the right track. Is it possible that something inside the loop
is raising an exception, thereby jumping past your breakpoint? Try putting
the loop inside a try-except.

-- Paul
May 14 '06 #2
"Paul McGuire" <pt***@austin.rr._bogus_.com> writes:
"Gary Wessle" <ph****@yahoo.com> wrote in message
news:87************@localhost.localdomain...
Hi

using the debugger, I happen to be on a line inside a loop, after
looping few times with "n" and wanting to get out of the loop to the
next line, I set a break point on a line after the loop structure and
hit c, that does not continue out of the loop and stop at the break
line, how is it down, I read the ref docs on pdb but could not figure
it out.

thanks
This is exactly how I do this operation using pdb, and it works for me, so
you are on the right track. Is it possible that something inside the loop
is raising an exception, thereby jumping past your breakpoint? Try putting
the loop inside a try-except.

-- Paul


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@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)
May 14 '06 #3
> 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@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.

Diez
May 14 '06 #4
Gary Wessle <ph****@yahoo.com> writes:
Hi

using the debugger, I happen to be on a line inside a loop, after
looping few times with "n" and wanting to get out of the loop to the
next line, I set a break point on a line after the loop structure and
hit c, that does not continue out of the loop and stop at the break
line, how is it down, I read the ref docs on pdb but could not figure
it out.
The command you are probably looking for is jump.

http://bashdb.sourceforge.net/pydb/p...on-resume.html

It is also documented in the stock python debugger
http://docs.python.org/lib/debugger-commands.html

Here's an example:

pdb ~/python/ptest.py /home/rocky/python/ptest.py(2)?() -> for i in range(1,10):
(Pdb) step /home/rocky/python/ptest.py(3)?() -> print i
(Pdb) list
1 #!/bin/python
2 for i in range(1,10):
3 -> print i
4 print "tired of this"
[EOF]
(Pdb) jump 4 /home/rocky/python/ptest.py(4)?()

-> print "tired of this"
(Pdb)

May 24 '06 #5
"Diez B. Roggisch" <de***@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@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.

May 24 '06 #6
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" <de***@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@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.

May 24 '06 #7

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

2 posts views Thread by Michael Satterwhite | last post: by
5 posts views Thread by Glen Wheeler | last post: by
5 posts views Thread by Ann | last post: by
6 posts views Thread by Bern | last post: by
3 posts views Thread by Jianli Shen | last post: by
14 posts views Thread by Daniel Bass | last post: by
25 posts views Thread by v4vijayakumar | last post: by
14 posts views Thread by Jan Schmidt | last post: by
36 posts views Thread by mdh | last post: by
1 post views Thread by CARIGAR | last post: by
reply views Thread by zhoujie | last post: by
reply views Thread by suresh191 | last post: by
reply views Thread by harlem98 | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.