pdb in python2.5
R. Bernstein
rocky at panix.com
Thu Jan 25 08:08:39 EST 2007
"Rotem" <vmalloc at gmail.com> writes:
> Hi,
>
> Maybe I'm repeating a previous post (please correct me if I am).
>
> I've tried the following code in python 2.5 (r25:51908, Oct 6 2006,
> 15:22:41)
> example:
>
> from __future__ import with_statement
> import threading
>
> def f():
> l = threading.Lock()
> with l:
> print "hello"
> raise Exception("error")
> print "world"
>
> try:
> f()
> except:
> import pdb
> pdb.pm()
>
> This fails because pdb.pm() attempts to access sys.last_traceback which
> is not assigned.
Recent releases of pydb (http://bashdb.sf.net/pydb) don't suffer this
problem. (But see below.)
> Trying:
> pdb.post_mortem(sys.exc_traceback)
>
> Yields the following:
> > test.py(9)f()
> -> print "world"
> (Pdb)
>
> the 'w' command yields a similar output, which implies that the
> exception was thrown from the wrong line.
> the traceback module is better, yielding correct results (displays line
> 8 instead of 9).
>
> Has anyone encountered this behavior?
Yes, this seems to be a bug in pdb. It is using the traceback's f_line
instance variable rather than the tb_lineno instance variable. I guess
these two values are usually the same. In fact, I haven't been able to
come up with a Python 2.4 situtation where they are different. (If
someone can, I'd appreciate it if you'd send me a small example so I
can put it in the pydb regression tests.) Even in 2.5, it's kind of
hard to get a case where they are different. If I remove the "with",
the problem goes away.
It was also bug in pydb, but I've just committed in CVS the fix for
this
> is pdb broken?
Best as I can tell pdb isn't all that well maintained. (Had it been, I
probably wouldn't have devoted the time to pydb that I have been.)
> I get similar results for larger/more complex pieces of code.
>
> Thanks in advance,
>
> Rotem
More information about the Python-list
mailing list