Possible bug in Python 2.5? (Was Re: pdb in python2.5)
R. Bernstein
rocky at panix.com
Thu Jan 25 14:15:43 EST 2007
I'd like to change my assessment of whether the problem encountered is
a pdb bug or not. It could be a bug in Python. (Right now it is only
known to be a bug in version 2.5.)
For a given traceback t, the question is whether t.tb_frame.f_lineno
can ever be different from t.tb_lineno.
Still, for now in pydb CVS, I've worked around this by checking.
rocky at panix.com (R. Bernstein) writes:
> "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