Re: Reverse debugging

Hui Zhu
2009-07-20T14:51:12Z

Hi Marc,

About change nquery to yquery, if the user answer y, a lot of record
entry will be delete. So I think nquery to be default is better.

Your patch change yquery to query is OK with me.

In prec, I use a lot of yquery and nquery and looks like mi cannot
control query very well. So I think add some switches to let you can
control prec more better.

On the other hand, shell we do some work to make mi support query better?

Thanks,
Hui

On Mon, Jul 20, 2009 at 21:19, Marc Khouzam<marc.khouzam@ericsson.com> wrote:
> Typo in my previous email.  Sorry.
>
>> (Note that I'm only suggesting to not make the query default to 'Y'.
>> There would still be a query though.)
>
> Should have read (no "not")
>
>> (Note that I'm only suggesting to make the query default to 'Y'.
>> There would still be a query though.)
>
>> -----Original Message-----
>> From: gdb-owner@sourceware.org
>> [mailto:gdb-owner@sourceware.org] On Behalf Of Marc Khouzam
>> Sent: Monday, July 20, 2009 8:50 AM
>> To: Hui Zhu; Nick Roberts
>> Cc: Daniel Jacobowitz; gdb@sources.redhat.com; Michael Snyder
>> Subject: RE: Reverse debugging
>>
>>
>>
>> > -----Original Message-----
>> > From: Hui Zhu [mailto:teawater@gmail.com]
>> > Sent: Sunday, July 19, 2009 11:27 PM
>> > To: Marc Khouzam; Nick Roberts
>> > Cc: Daniel Jacobowitz; gdb@sources.redhat.com; Michael Snyder
>> > Subject: Re: Reverse debugging
>> >
>> > Thanks Marc,  but what about I keep it but add some switches for it?
>> > I want keep the query to tui user.
>> > For example:
>> > set record query off
>> > set record changememeory on
>>
>> (Note that I'm only suggesting to make the query default to 'Y'.
>> There would still be a query though.)
>>
>> I've been giving the whole problem a little more thought, and I now
>> think that it is the way queries are answered that should be changed
>> generically.
>>
>> I'll post a patch today and see what people think.
>>
>> Note that the suggestion I will post will rely on 'set confirm off'.
>> If Nick cannot use that then he'll still need you to have a switch to
>> turn these queries off.
>>
>> Thanks
>>
>> Marc
>>
>>
>> >
>> > Thanks,
>> > Hui
>> >
>> >
>> > On Sun, Jul 19, 2009 at 11:19, Marc
>> > Khouzam<marc.khouzam@ericsson.com> wrote:
>> > >> -----Original Message-----
>> > >> From: Daniel Jacobowitz [mailto:drow@false.org]
>> > >> Sent: July-17-09 10:25 AM
>> > >> To: Marc Khouzam
>> > >> Cc: Nick Roberts; Hui Zhu; gdb@sources.redhat.com; Michael Snyder
>> > >> Subject: Re: Reverse debugging
>> > >>
>> > >> On Fri, Jul 17, 2009 at 10:12:00AM -0400, Marc Khouzam wrote:
>> > >> > I noticed that the previous CDT GDB integration has its console
>> > >> > considered
>> > >> > a tty.  It may be worth looking into the difference... when
>> > >> time allows
>> > >> > it :-)
>> > >>
>> > >> Wasn't someone just talking on cdt-dev about trouble with
>> > whether DSF
>> > >> used Spawner or not?  That'd do it.
>> > >
>> > > I was wrong about the console being a tty.  The old CDT GDB
>> > integration
>> > > console is also not a tty.  What they do though is use
>> > > 'set confirm off'.  That makes sense since queries are
>> > being answered
>> > > automatically anyway.
>> > >
>> > > Nick, in your specific case 'confirm off' would work.  The default
>> > > answer to
>> > > 'record stop' is yes (well, there is not default, but in
>> > that case, 'y'
>> > > is
>> > > chosen).  If you don't want to always 'set confirm off' you
>> > may consider
>> > > setting it right before sending 'record stop' and turn it back on
>> > > right after.  That may be a good enough workaround until
>> there is a
>> > > proper
>> > > solution to this query problem.
>> > >
>> > > For me the problem for PRecord remains because the
>> default value is
>> > > not always what I want.  For example, in PRecord the
>> default answer
>> > > to changing memory and loosing the recorded history
>> > > is "N", but as a frontend, I want to answer "Y".
>> > >
>> > > To fix this problem I suggest that in record.c,
>> > > we replace 'nquery' with 'query'; that will make the
>> > default be 'Y' when
>> > >
>> > > confirm is off or when there is no tty.  Note that this
>> > seems to be what
>> > >
>> > > is being done everywhere else in GDB.  There is only one
>> > case (pending
>> > > breakpoints) that uses default queries, outside of PRecord.
>> >  Except for
>> > > that
>> > > one case, it is really only PRecord that uses yquery and
>> > nquery.  And
>> > > the
>> > > pending breakpoint case is not a problem for frontends that use MI
>> > > because
>> > > the MI command does not trigger the query.
>> > >
>> > > Note that up to now, I've been recompiling GDB with that
>> suggestion
>> > > so that I can properly use PRecord in Eclipse.
>> > >
>> > > The below patch implements the suggestion.
>> > >
>> > > Thanks
>> > >
>> > > Marc
>> > >
>> > > ChangeLog
>> > > 2009-07-18  Marc Khouzam  <marc.khouzam@ericsson.com>
>> > >
>> > >        * record.c (record_store_registers): Replace nquery with
>> > >        query to allow frontends to automatically answer 'y'.
>> > >        (record_xfer_partial): Ditto.
>> > >
>> > >
>> > > ### Eclipse Workspace Patch 1.0
>> > > #P src
>> > > Index: gdb/record.c
>> > >
>> ===================================================================
>> > > RCS file: /cvs/src/src/gdb/record.c,v
>> > > retrieving revision 1.8
>> > > diff -u -r1.8 record.c
>> > > --- gdb/record.c        2 Jul 2009 17:21:06 -0000       1.8
>> > > +++ gdb/record.c        19 Jul 2009 03:06:01 -0000
>> > > @@ -937,13 +937,13 @@
>> > >          /* Let user choose if he wants to write register
>> > or not.  */
>> > >          if (regno < 0)
>> > >            n =
>> > > -             nquery (_("Because GDB is in replay mode,
>> > changing the "
>> > > +             query (_("Because GDB is in replay mode,
>> > changing the "
>> > >                        "value of a register will make the
>> > execution "
>> > >                        "log unusable from this point onward.  "
>> > >                        "Change all registers?"));
>> > >          else
>> > >            n =
>> > > -             nquery (_("Because GDB is in replay mode,
>> changing the
>> > > value "
>> > > +             query (_("Because GDB is in replay mode,
>> changing the
>> > > value "
>> > >                        "of a register will make the execution log
>> > > unusable "
>> > >                        "from this point onward.  Change
>> > register %s?"),
>> > >                      gdbarch_register_name (get_regcache_arch
>> > > (regcache),
>> > > @@ -993,7 +993,7 @@
>> > >       if (RECORD_IS_REPLAY)
>> > >        {
>> > >          /* Let user choose if he wants to write memory
>> or not.  */
>> > > -         if (!nquery (_("Because GDB is in replay mode,
>> writing to
>> > > memory "
>> > > +         if (!query (_("Because GDB is in replay mode, writing to
>> > > memory "
>> > >                         "will make the execution log
>> > unusable from this
>> > > "
>> > >                         "point onward.  Write memory at
>> > address %s?"),
>> > >                       paddress (target_gdbarch, offset)))
>> > >
>> > >
>> > >
>> > >
>> >
>>
>