From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 31905 invoked by alias); 14 Jan 2003 20:21:12 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 31896 invoked from network); 14 Jan 2003 20:21:11 -0000 Received: from unknown (HELO touchme.toronto.redhat.com) (216.138.202.10) by 209.249.29.67 with SMTP; 14 Jan 2003 20:21:11 -0000 Received: from redhat.com (totem.toronto.redhat.com [172.16.14.242]) by touchme.toronto.redhat.com (Postfix) with ESMTP id 74993800041; Tue, 14 Jan 2003 15:20:58 -0500 (EST) Message-ID: <3E24712A.6070007@redhat.com> Date: Tue, 14 Jan 2003 20:21:00 -0000 From: Fernando Nasser Organization: Red Hat , Inc. - Toronto User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.1) Gecko/20020827 X-Accept-Language: en-us, en MIME-Version: 1.0 To: Elena Zannoni Cc: gdb-patches@sources.redhat.com Subject: Re: [RFC/RFA] New 'to' command References: <15905.49160.629338.929610@localhost.redhat.com> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit X-SW-Source: 2003-01/txt/msg00531.txt.bz2 Sorry to get back to the name thing. But I believe the discussion concentrated more on the semantics of the two commands and how until would be implemented -- nobody was specifically fond of the names that came up in any case. What about "advance-to"? You can add "to" as an alias, I don't mind (although I don't thing we need/should as typing "adv" will suffice).. I believe it captures the idea of what the user is trying to do in this case. Regards to all, Fernando Elena Zannoni wrote:> Following up from the long long long thread: > http://sources.redhat.com/ml/gdb-patches/2002-12/msg00584.html > > Here is a new command called 'to', which takes a location (any > location) specified like for the break command, and simply continues > to it, with the restriction that the current frame is not exited. > > I have left the current 'until' command alone, except for a modification > of the help string. > > If this is agreed upon, I'll submit doco changes and testsuite. > > 2003-01-12 Elena Zannoni > > * breakpoint.c (until_break_command): Add new argument. Use it to > decide whether to stop only at the current frame or not. > * breakpoint.h (until_break_command): Update prototype. > * infcmd.c (until_command): Add new argument to until_break_command > call. > (to_command): New function. > (_initialize_infcmd): Update help string for 'until' command. > Add new 'to' command. > > > Index: breakpoint.c > =================================================================== > RCS file: /cvs/uberbaum/gdb/breakpoint.c,v > retrieving revision 1.105 > diff -u -p -r1.105 breakpoint.c > --- breakpoint.c 4 Jan 2003 23:07:24 -0000 1.105 > +++ breakpoint.c 12 Jan 2003 19:08:07 -0000 > @@ -5576,7 +5576,7 @@ until_break_command_continuation (struct > > /* ARGSUSED */ > void > -until_break_command (char *arg, int from_tty) > +until_break_command (char *arg, int from_tty, int anywhere) > { > struct symtabs_and_lines sals; > struct symtab_and_line sal; > @@ -5609,9 +5609,16 @@ until_break_command (char *arg, int from > > resolve_sal_pc (&sal); > > - breakpoint = > - set_momentary_breakpoint (sal,get_frame_id (deprecated_selected_frame), > - bp_until); > + if (anywhere) > + /* If the user told us to continue until a specified location, > + we don't specify a frame at which we need to stop. */ > + breakpoint = set_momentary_breakpoint (sal, null_frame_id, bp_until); > + else > + /* Otherwise, specify the current frame, because we want to stop only > + at the very same frame. */ > + breakpoint = set_momentary_breakpoint (sal, > + get_frame_id (deprecated_selected_frame), > + bp_until); > > if (!event_loop_p || !target_can_async_p ()) > old_chain = make_cleanup_delete_breakpoint (breakpoint); > @@ -5639,8 +5646,8 @@ until_break_command (char *arg, int from > add_continuation (until_break_command_continuation, arg1); > } > > - /* Keep within the current frame */ > - > + /* Keep within the current frame, or in frames called by the current > + one. */ > if (prev_frame) > { > sal = find_pc_line (get_frame_pc (prev_frame), 0); > > Index: breakpoint.h > =================================================================== > RCS file: /cvs/uberbaum/gdb/breakpoint.h,v > retrieving revision 1.16 > diff -u -p -r1.16 breakpoint.h > --- breakpoint.h 11 Dec 2002 22:34:47 -0000 1.16 > +++ breakpoint.h 12 Jan 2003 19:08:50 -0000 > @@ -534,7 +534,7 @@ extern int deprecated_frame_in_dummy (st > > extern int breakpoint_thread_match (CORE_ADDR, ptid_t); > > -extern void until_break_command (char *, int); > +extern void until_break_command (char *, int, int); > > extern void breakpoint_re_set (void); > > Index: infcmd.c > =================================================================== > RCS file: /cvs/uberbaum/gdb/infcmd.c,v > retrieving revision 1.69 > diff -u -p -r1.69 infcmd.c > --- infcmd.c 13 Dec 2002 16:26:02 -0000 1.69 > +++ infcmd.c 12 Jan 2003 19:09:05 -0000 > @@ -1140,10 +1140,38 @@ until_command (char *arg, int from_tty) > } > > if (arg) > - until_break_command (arg, from_tty); > + until_break_command (arg, from_tty, 0); > else > until_next_command (from_tty); > } > + > +static void > +to_command (char *arg, int from_tty) > +{ > + int async_exec = 0; > + > + if (!target_has_execution) > + error ("The program is not running."); > + > + /* Find out whether we must run in the background. */ > + if (arg != NULL) > + async_exec = strip_bg_char (&arg); > + > + /* If we must run in the background, but the target can't do it, > + error out. */ > + if (event_loop_p && async_exec && !target_can_async_p ()) > + error ("Asynchronous execution not supported on this target."); > + > + /* If we are not asked to run in the bg, then prepare to run in the > + foreground, synchronously. */ > + if (event_loop_p && !async_exec && target_can_async_p ()) > + { > + /* Simulate synchronous execution */ > + async_disable_stdin (); > + } > + > + until_break_command (arg, from_tty, 1); > +} > > > /* Print the result of a function at the end of a 'finish' command. */ > @@ -2130,10 +2158,14 @@ Argument N means do this N times (or til > > c = add_com ("until", class_run, until_command, > "Execute until the program reaches a source line greater than the current\n\ > -or a specified line or address or function (same args as break command).\n\ > -Execution will also stop upon exit from the current stack frame."); > +or a specified location (same args as break command) within the current frame."); > set_cmd_completer (c, location_completer); > add_com_alias ("u", "until", class_run, 1); > + > + c = add_com ("to", class_run, to_command, > + "Continue the program up to the given location (same args as break command).\n\ > +Execution will also stop upon exit from the current stack frame."); > + set_cmd_completer (c, location_completer); > > c = add_com ("jump", class_run, jump_command, > "Continue program being debugged at specified line or address.\n\ > -- Fernando Nasser Red Hat - Toronto E-Mail: fnasser@redhat.com 2323 Yonge Street, Suite #300 Toronto, Ontario M4P 2C9