Different output from -gdb-show than show

Michael Snyder msnyder@vmware.com
Tue Aug 31 18:33:00 GMT 2010


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?


-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: infrun.txt
URL: <http://sourceware.org/pipermail/gdb/attachments/20100831/4d769262/attachment.txt>


More information about the Gdb mailing list