Possible bug in Python 2.5? (Was Re: pdb in python2.5)

Rotem vmalloc at gmail.com
Thu Jan 25 16:31:13 EST 2007


Hi,

I noticed that pydb.pm() also fails in python2.5 when invoked on that
same example (seems like also trying to access a nonexistent
attribute/variable).

Is this known to you as well/was it fixed?

On Jan 25, 9:15 pm, r... at panix.com (R. Bernstein) wrote:
> 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.
>
> r... at panix.com (R. Bernstein) writes:
> > "Rotem" <vmal... 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