RE: Reverse debugging

Marc Khouzam
2009-07-19T03:21:01Z

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