This is the mail archive of the gdb@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: Different output from -gdb-show than show


 

> -----Original Message-----
> From: Michael Snyder [mailto:msnyder@vmware.com] 
> Sent: Tuesday, August 31, 2010 2:33 PM
> To: Pedro Alves
> Cc: gdb@sourceware.org; Marc Khouzam
> Subject: Re: Different output from -gdb-show than show
> 
> Pedro Alves wrote:
> > On Tuesday 31 August 2010 16:02:39, Marc Khouzam wrote:
> >> Hi,
> >>
> >> while looking for a way know if a target supports reverse execution
> >> I noticed this:
> >>
> >>> gdb.7.2 -i mi testing/a.out
> >> (gdb) start
> >> (gdb) -gdb-set exec-direction reverse
> >> ^done
> >> (gdb) -gdb-show exec-direction
> >> ^done,value="reverse"
> >> (gdb) show exec-direction
> >> &"show exec-direction\n"
> >> ~"Forward.\n"
> >> ^done
> >>
> >> For some reason, -gdb-show is giving a different result 
> than CLI show.
> >> For my "does target support reverse" case, I will be 
> forced to use 'show'.
> >>
> >> Bug?
> > 
> > Yes.  Here in infrun.c:
> > 
> >> /* User interface for reverse debugging:
> >>    Set exec-direction / show exec-direction commands
> >>    (returns error unless target implements 
> to_set_exec_direction method).  */
> >>
> >> enum exec_direction_kind execution_direction = EXEC_FORWARD;
> >> static const char exec_forward[] = "forward";
> >> static const char exec_reverse[] = "reverse";
> >> static const char *exec_direction = exec_forward;
> >> static const char *exec_direction_names[] = {
> >>   exec_forward,
> >>   exec_reverse,
> >>   NULL
> >> };
> >>
> >>
> >> static void
> >> set_exec_direction_func (char *args, int from_tty,
> >> 			 struct cmd_list_element *cmd)
> >> {
> >>   if (target_can_execute_reverse)
> >>     {
> >>       if (!strcmp (exec_direction, exec_forward))
> >> 	execution_direction = EXEC_FORWARD;
> >>       else if (!strcmp (exec_direction, exec_reverse))
> >> 	execution_direction = EXEC_REVERSE;
> >>     }
> >> }
> >>
> > 
> > The above does not complain if target_can_execute_reverse 
> is false, contrary
> > to what the comment above says.
> > Leaves exec_direction and execution_direction out of sync 
> in that case.
> > (your case, because you haven't started the process yet, 
> you're debugging
> > the executable, which can't do reverse debugging)
> > 
> >> static void
> >> show_exec_direction_func (struct ui_file *out, int from_tty,
> >> 			  struct cmd_list_element *cmd, const 
> char *value)
> >> {
> >>   switch (execution_direction) {
> >>   case EXEC_FORWARD:
> >>     fprintf_filtered (out, _("Forward.\n"));
> >>     break;
> >>   case EXEC_REVERSE:
> >>     fprintf_filtered (out, _("Reverse.\n"));
> >>     break;
> >>   case EXEC_ERROR:
> >>   default:
> >>     fprintf_filtered (out, 
> >> 		      _("Forward (target `%s' does not support 
> exec-direction).\n"),
> >> 		      target_shortname);
> >>     break;
> >>   }
> >> }
> > 
> > "show exec-direction" prints based on execution_direction, while
> > "-gdb-show exec-direction" prints the raw exec_drection string:
> > 
> >>   add_setshow_enum_cmd ("exec-direction", class_run, 
> exec_direction_names,
> >> 			&exec_direction, _("Set direction of 
> execution.\n\
> >                                     ^^^^^^^^^^^^^^^
> > This is what is used by -gdb-show. --^
> > 
> > 
> 
> 
> My bad.
> 
> Would this be suitable?
> 
> 2010-08-31  Michael Snyder  <msnyder@msnyder-server.eng.vmware.com>
> 
> 	* infrun.c (set_exec_direction_func): Error out if 
> target does not
> 	support reverse execution.
> 
> Index: infrun.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/infrun.c,v
> retrieving revision 1.445
> diff -u -p -r1.445 infrun.c
> --- infrun.c	1 Jul 2010 15:36:15 -0000	1.445
> +++ infrun.c	31 Aug 2010 18:32:36 -0000
> @@ -6436,6 +6436,8 @@ set_exec_direction_func (char *args, int
>        else if (!strcmp (exec_direction, exec_reverse))
>  	execution_direction = EXEC_REVERSE;
>      }
> +  else

maybe also doing

exec_direction = exec_forward;

before the error? (I stole it from the non_stop case :-))

> +    error (_("Target does not support this operation."));
>  }
>  
>  static void


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