Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Doug Evans <dje@google.com>
To: pmuldoon@redhat.com
Cc: gdb-patches@sourceware.org
Subject: Re: [patch] Add an evaluation function hook to Python breakpoints.
Date: Tue, 14 Dec 2010 03:31:00 -0000	[thread overview]
Message-ID: <AANLkTikAg5SvJoahRR+WVcmyG15=zNRPOFrxJrnnPh3+@mail.gmail.com> (raw)
In-Reply-To: <m3bp4pcrp1.fsf@redhat.com>

On Mon, Dec 13, 2010 at 1:02 PM, Phil Muldoon <pmuldoon@redhat.com> wrote:
> Doug Evans <dje@google.com> writes:
>
>> On Mon, Dec 13, 2010 at 5:50 AM, Phil Muldoon <pmuldoon@redhat.com> wrote:
>>> This patch allows Python breakpoints to be sub-classed and implements
>>> the "evaluate" function.  If the user defines an "evaluate" function in
>>> the Python breakpoint it will be called when GDB evaluates any
>>> conditions assigned to the breakpoint. This allows the user to write
>>> conditional breakpoints entirely in Python, and also allows the user to
>>> collect data at each breakpoint.  If the function returns True, GDB will
>>> stop the inferior at the breakpoint; if the function returns False
>>> the inferior will continue.
>>
>> Hi.
>> My $0.02 cents.
>>
>> Collecting data in the "evaluate" function feels too hacky for
>> something we explicitly tell users is the published way to do this
>> kind of thing.
>
> It's nothing more than a hook for the user to accomplish some truth
> finding mission at breakpoint evaluation time.  If the user wants to
> collect data, then I think they can do that -- that is we should not
> attempt to stop them.  I probably worded my email hastily; FWIW I think
> this a place where we can write conditional breakpoints that can be
> written entirely in Python.

I'm not suggesting we stop users from doing quick hacks. :-)
[Heck, can they already write a breakpoint condition in Python?  E.g.
with a python convenience function?]

But there is an existing need to collect data at a breakpoint in a
stable way (i.e. collecting data in the CLI commands section is
problematic).  I think such a facility is rather useful,  and we
should provide it.  But I'd rather make it explicit, instead of a
hacky use of the gdb breakpoint condition.

It's an orthogonal feature to allowing one to write the breakpoint
condition in Python via a subclass of gdb.Breakpoint, so it *could* be
a separate patch.
I just don't want the breakpoint condition being *the* way to collect data.

>> And the name "evaluate" doesn't feel right either.  What does it mean
>> to evaluate a breakpoint? [One might think it means to evaluate the
>> location of the breakpoint, e.g., since gdb tries to re-evaluate the
>> location when the binary changes.]
>> I realize the _p convention mightn't be sufficiently common to use in
>> the Python API, but for example a better name might be stop_p.
>> And then one would have another method (I don't have a good name for
>> it ATM) to use to collect data.
>> Setting aside name choices, I like that API better.
>
> I'm happy with any name.  Lets just call it what the majority are
> comfortable with.  I used "evaluate" purely as a descriptive term to what
> we are doing.  Whatever else fits will work with me.
>
>> OTOH, it seems like Python-based breakpoints have two conditions now
>> (or at least two kinds of conditions one has to think about).
>> One set with the "condition" command and one from the "evaluate" API function.
>> IWBN to have only one, at least conceptually.  Maybe you could rename
>> "evaluate" to "condition" (or some such, I realize there's already a
>> "condition"), and have the default be to use the CLI condition.
>
>
> This is something that is always a ponder-point for Python API hackers.
> There are lots of places where "things" have worked in CLI for many years,
> and we (well, I) do not want to deprecate existing CLI functionality
> while expanding other areas.  I'm not sure what the path is from here.
> Overloading the condition API seems like a pain for the script-writer to
> figure out if it is a Python scripted condition, or a CLI scripted
> condition.  That is why I ended up choosing a different name.

Yeah, a simple overloading of the condition API seems problematic.
Though conceptually having the value either be a string of text or a
method/closure doesn't seem entirely clumsy.
If it's a string it's a standard CLI condition, and if it's a
procedure(function/method/closure) it's Python.
[A simple test might be whether the condition has the __call__ attribute.]
From a u/i perspective is that better?  I don't know but it feels so.
[E.g., one doesn't have to deal with possible confusion over
gdb.Breakpoint having two conditions.]
There may be some implementation details to work out of course.


  reply	other threads:[~2010-12-14  3:31 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-12-13 13:50 Phil Muldoon
2010-12-13 14:19 ` Eli Zaretskii
2010-12-13 14:47   ` Phil Muldoon
2010-12-13 15:07     ` Eli Zaretskii
2010-12-13 17:21       ` Phil Muldoon
2010-12-13 17:46         ` Eli Zaretskii
2010-12-13 14:33 ` Pedro Alves
2010-12-13 14:56   ` Phil Muldoon
2010-12-13 15:07     ` Pedro Alves
2010-12-13 20:45 ` Doug Evans
2010-12-13 21:02   ` Phil Muldoon
2010-12-14  3:31     ` Doug Evans [this message]
2010-12-14 17:18       ` Phil Muldoon
2010-12-14 17:28   ` Tom Tromey
2010-12-14 19:51     ` Phil Muldoon
2010-12-14 20:00       ` Phil Muldoon
2010-12-15 15:34     ` Phil Muldoon
2010-12-15 20:51       ` Tom Tromey
2011-01-27 12:44         ` Phil Muldoon
     [not found]           ` <AANLkTimi6ugruNAqUGHni8Kvkz+B5-s2aAkEoTY2D_gT@mail.gmail.com>
2011-01-27 21:40             ` Phil Muldoon
2011-01-28 10:42           ` Tom Tromey
2010-12-15 16:21     ` Doug Evans
2010-12-15 20:57       ` Tom Tromey
2010-12-21 17:33         ` Doug Evans
2010-12-21 20:02           ` Tom Tromey
2010-12-22 16:34             ` Doug Evans
2010-12-22 17:35               ` Tom Tromey
2010-12-28  5:53                 ` Doug Evans
2011-01-05 18:35                   ` Tom Tromey
2011-01-05 20:23                     ` Phil Muldoon
2011-01-09 20:32                       ` Doug Evans
2010-12-14 17:46   ` Pedro Alves
2010-12-14 16:35 ` Tom Tromey
2010-12-14 17:02   ` Phil Muldoon
2010-12-14 17:48     ` Tom Tromey
2010-12-14 16:42 ` Tom Tromey

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='AANLkTikAg5SvJoahRR+WVcmyG15=zNRPOFrxJrnnPh3+@mail.gmail.com' \
    --to=dje@google.com \
    --cc=gdb-patches@sourceware.org \
    --cc=pmuldoon@redhat.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