This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [RFC] [PATCH] Provide the ability to write the frame unwinder in Python
- From: Simon Marchi <simon dot marchi at ericsson dot com>
- To: <gdb-patches at sourceware dot org>
- Date: Mon, 12 Jan 2015 16:00:03 -0500
- Subject: Re: [RFC] [PATCH] Provide the ability to write the frame unwinder in Python
- Authentication-results: sourceware.org; auth=none
- References: <CAHQ51u7NUoQ8w9c5mc-Eiz05b1Nub6zqj_Ne7vfgWb5EP9_X8w at mail dot gmail dot com>
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