claims of python unit test un-debugability considered somewhat exaggerated

David Ostrovsky d.ostrovsky at gmx.de
Tue Apr 9 16:45:34 PDT 2013


On Tue, 2013-04-09 at 11:26 -0400, David Malcolm wrote:
> On Tue, 2013-04-09 at 11:22 +0100, Michael Meeks wrote:
> > Hi guys,
> > 
> > On Mon, 2013-04-08 at 11:32 -0600, Tom Tromey wrote:
> > > CCing David Malcolm.
> > > 
> > > Michael> (gdb) py-bt
> > > 
> > > I just wanted to mention here that Phil Muldoon is working on a
> "frame
> > > filter" patch series that is basically "pretty printing for stack
> > > frames".  With this in place you'll no longer need a special
> command --
> > > with appropriate support from Python, you'll be able to see
> interpreted
> > > frames interleaved with the low-level C frames.
> > 
> >       Oh - nice ! :-)
> > 
> > > This series is nearing final review now and should appear in gdb
> 7.7,
> > > later this year.
> > 
> >       Excellent news indeed.
> > 
> > > I think we're planning to rewrite the existing "py-bt" code into
> frame
> > > filter form ourselves.
> > 
> >       So - in which case this significantly reduces the problems of
> using
> > python for debugging; I assume that with py-bt - there are still
> issues
> > with interleaving two tools for printing parts of backtraces when we
> > call several times to and fro between C++ and python.
> > 
> > > Eventually we'd like to have more full support for "mixed"
> interpreter
> > > and C debugging.  However this is a ways off.
> > 
> >       For me, clearly seeing the python line numbers is the key
> rather than
> > the interpreter details - we treat python itself as working
> black-box -
> > and the script itself as the problem ;-)
> 
> Aha.  Sorry; I came into this discussion halfway though.
> 
> I wrote the Python gdb hooks for CPython itself (i.e. "py-bt" and
> others).  You can see documentation for them here:
> 
> http://docs.python.org/devguide/gdb.html#gdb-7-and-later
> 
> In particular:
>   (gdb) py-list
> should give you python source code for the current python frame.
>         

Works like a charm here on OpenSUSE 12.3 too, with system python3.3:

(gdb) py-list
  32                )
  33    
  34        # property 'Value' is read only?
  35        @unittest.expectedFailure
  36        def test_get_expression_veto_read_only(self):
 >37            os.kill(os.getpid(), signal.SIGUSR1)

and

(gdb) py-bt
Traceback (most recent call first):
  File "./qa/unoapi/python/get_expression.py", line 37, in
test_get_expression_veto_read_only
    os.kill(os.getpid(), signal.SIGUSR1)
  File "/usr/lib64/python3.3/unittest/case.py", line 96, in wrapper
    func(*args, **kwargs)


I must be missing something, but i didn't find a standard way how to
install Tools/gdb/libpython.py from cpython, so i just cloned the
upstream python, with 
hg clone http://hg.python.org/cpython

and borrowed that lib from there (sourcing it manually on gdb):
cpython/Tools/gdb/libpython.py

I wrote a detailed summary on wiki:

https://wiki.documentfoundation.org/Development/Python_Unit_Tests

Enjoy the first backtrace from "in-process python unit test" ;-)

David




More information about the LibreOffice mailing list