public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Doug Evans <dje@google.com>
To: Simon Marchi <simon.marchi@ericsson.com>
Cc: gdb-patches <gdb-patches@sourceware.org>
Subject: Re: [RFC] [PATCH] Provide the ability to write the frame unwinder in Python
Date: Mon, 12 Jan 2015 21:22:00 -0000	[thread overview]
Message-ID: <CADPb22QBGNGO0KBVcOK14nYh2oxi8wJRPD1sdzLfuEBsJD4WcA@mail.gmail.com> (raw)
In-Reply-To: <54B435D3.7000409@ericsson.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.

  reply	other threads:[~2015-01-12 21:22 UTC|newest]

Thread overview: 60+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-12-15 18:14 Alexander Smundak
2014-12-22 19:24 ` Alexander Smundak
2014-12-29 18:02   ` Alexander Smundak
2015-01-05 17:53     ` Alexander Smundak
2015-01-12 20:03       ` Alexander Smundak
2015-01-22  3:31         ` Alexander Smundak
2015-01-29  1:36           ` Alexander Smundak
2015-01-12 21:00 ` Simon Marchi
2015-01-12 21:22   ` Doug Evans [this message]
2015-02-04 22:36 ` Doug Evans
2015-02-12 17:58   ` Alexander Smundak
2015-02-19  2:32     ` Alexander Smundak
2015-02-20 11:12     ` Phil Muldoon
2015-02-26  3:09       ` Alexander Smundak
2015-03-02 22:56         ` Alexander Smundak
2015-03-03  8:46           ` Andy Wingo
2015-03-04  2:36             ` Alexander Smundak
2015-03-04  7:49               ` Andy Wingo
2015-03-09 11:02                 ` Phil Muldoon
2015-03-11  2:22                   ` Alexander Smundak
2015-03-11  8:49                     ` Andy Wingo
2015-03-11 17:34                       ` Doug Evans
2015-03-11 18:48                       ` Alexander Smundak
2015-03-16 11:29                         ` Andy Wingo
2015-03-16 12:01                           ` Andy Wingo
2015-03-16 17:25                           ` Alexander Smundak
2015-03-17  8:57                             ` Andy Wingo
2015-03-17 19:48                               ` Alexander Smundak
2015-03-17 21:37                                 ` Alexander Smundak
2015-03-18  8:54                                   ` Andy Wingo
2015-03-18 22:57                                     ` Alexander Smundak
2015-03-23 19:58                                       ` Doug Evans
2015-03-24  9:06                                         ` Andy Wingo
2015-03-26  3:31                                         ` Alexander Smundak
2015-03-26 18:53                                           ` Eli Zaretskii
2015-03-27 22:29                                           ` Doug Evans
2015-03-28  1:10                                             ` Alexander Smundak
2015-03-30 17:45                                               ` Doug Evans
2015-03-30 19:49                                                 ` Alexander Smundak
2015-03-31 22:36                                                   ` Doug Evans
2015-04-01  0:09                                                     ` Alexander Smundak
2015-04-01  0:28                                                       ` Doug Evans
2015-03-18 23:25                                 ` Doug Evans
2015-03-19  0:36                                   ` Alexander Smundak
2015-03-19  8:12                                     ` Andy Wingo
2015-03-20  0:15                                       ` Doug Evans
2015-03-20  2:27                                         ` Alexander Smundak
2015-03-20 17:48                                           ` Doug Evans
2015-03-20  8:26                                         ` Andy Wingo
2015-03-20 18:32                                           ` Doug Evans
2015-03-17 22:21                               ` Doug Evans
2015-03-18  8:57                                 ` Andy Wingo
2015-03-18 16:48                                   ` Doug Evans
2015-03-19  8:04                                     ` Andy Wingo
2015-03-09  9:42           ` Andy Wingo
2015-03-03  0:49         ` Alexander Smundak
2015-03-03 14:38           ` Andy Wingo
2015-03-04  2:52             ` Alexander Smundak
2015-02-20  9:42 ` Phil Muldoon
2015-02-20  9:59   ` Phil Muldoon

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CADPb22QBGNGO0KBVcOK14nYh2oxi8wJRPD1sdzLfuEBsJD4WcA@mail.gmail.com \
    --to=dje@google.com \
    --cc=gdb-patches@sourceware.org \
    --cc=simon.marchi@ericsson.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).