From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 5968 invoked by alias); 31 Aug 2010 15:29:23 -0000 Received: (qmail 5955 invoked by uid 22791); 31 Aug 2010 15:29:21 -0000 X-SWARE-Spam-Status: No, hits=-2.0 required=5.0 tests=AWL,BAYES_00,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mail.codesourcery.com (HELO mail.codesourcery.com) (38.113.113.100) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 31 Aug 2010 15:29:17 +0000 Received: (qmail 15721 invoked from network); 31 Aug 2010 15:29:15 -0000 Received: from unknown (HELO orlando.localnet) (pedro@127.0.0.2) by mail.codesourcery.com with ESMTPA; 31 Aug 2010 15:29:15 -0000 From: Pedro Alves To: gdb@sourceware.org Subject: Re: Different output from -gdb-show than show Date: Tue, 31 Aug 2010 15:29:00 -0000 User-Agent: KMail/1.13.2 (Linux/2.6.33-29-realtime; KDE/4.4.2; x86_64; ; ) Cc: Marc Khouzam References: In-Reply-To: MIME-Version: 1.0 Content-Type: Text/Plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Message-Id: <201008311629.12479.pedro@codesourcery.com> X-IsSubscribed: yes Mailing-List: contact gdb-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-owner@sourceware.org X-SW-Source: 2010-08/txt/msg00174.txt.bz2 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. --^ -- Pedro Alves