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