This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [RFC] [PATCH] Provide the ability to write the frame unwinder in Python


On 14-12-15 01:13 PM, Alexander Smundak wrote:
> Python frame filters provide the ability to display non-native frames in
> a mixed-language application (say, a backtrace of an application written
> in C and embedding Java Virtual Machine can be displayed as a mix of
> native frames and Java frames). However, GDB cannot always unwind
> non-native frames. The proposed patch adds the ability to write frame
> unwinders in Python.
> 
> 2014-12-12  Sasha Smundak  <asmundak@google.com>
> 
>         * Makefile.in (SUBDIR_PYTHON_OBJS): Add py-unwind.o.
>         (SUBDIR_PYTHON_SRCS): Add py-unwind.c.
>         (py-unwind.o): New recipe.
>         * NEWS: mention Python frame unwinding.
>         * data-directory/Makefile.in (PYTHON_FILE_LIST):  Add sniffers.py.
>         * doc/python.texi (Writing a Frame Unwinder in Python): Add
>         section.
>         * python/py-objfile.c (objfile_object): Add frame_sniffers field.
>         (objfpy_dealloc): Decrement frame_sniffers reference count.
>         (objfpy_initialize): Create frame_sniffers list.
>         (objfpy_get_frame_sniffers): Implement Objfile.frame_sniffers
>         getter.
>         (objfpy_set_frame_sniffers): Implement Objfile.frame_sniffers
>         setter.
>         (objfile_getset): Add frame_sniffers attribute to Objfile.
>         * python/py-progspace.c (pspace_object): Add frame_sniffers field.
>         (pspy_dealloc): Decrement frame_sniffers reference count.
>         (pspy_initialize): Create frame_sniffers list.
>         (pspy_get_frame_sniffers): Implement gdb.Progspace.frame_sniffers
>         getter.
>         (pspy_set_frame_sniffers): Implement gdb.Progspace.frame_sniffers
>         setter.
>         (pspy_getset): Add frame_sniffers attribute to gdb.Progspace.
>         * python/py-unwind.c: New file, implements Python frame sniffers
>         interface.
>         * python/python-internal.h (pspy_get_name_sniffers): New prototype.
>         (objpy_get_frame_sniffers): New prototype.
>         (gdbpy_initialize_unwind): New prototype.
>         * python/python.c (gdbpy_apply_type_printers): Call
>         gdbpy_initialize_unwind.
>         * python/lib/gdb/__init__.py (packages): add frame_sniffers.
> 
> 2014-12-12  Sasha Smundak  <asmundak@google.com>
> 
>         * gdb.python/py-unwind.c: Test program for the py-unwind test.
>         * gdb.python/py-unwind.exp: Python frame sniffers test.
>         * gdb.python/py-unwind.py: Frame sniffer in Python tested by
>         py-unwind test.
> 

Hi Alexander,

I don't have much experience in this field, so I fail to see what problem it would
help to solve.

>From what I understand, with CPython, each PyEval_EvalFrameEx frame maps to one
non-native (Python) frame. So it's easy to just filter out the others and tweak
the output with a frame filter. Are you talking about other languages/VM where it's
not as simple as this? Could you provide a more concrete example to illustrate the
usefulness of the feature?

Thanks!

Simon


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]