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: Doug Evans <dje at google dot com>
- To: Simon Marchi <simon dot marchi at ericsson dot com>
- Cc: gdb-patches <gdb-patches at sourceware dot org>
- Date: Mon, 12 Jan 2015 13:22:47 -0800
- 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> <54B435D3 dot 7000409 at ericsson dot com>
On Mon, Jan 12, 2015 at 1:00 PM, Simon Marchi <simon.marchi@ericsson.com> wrote:
> 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?
That's exactly it: "other languages/VM", and in particular Java.
I plan to get to this this week, but more eyes can certainly help.