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 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.


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