From patchwork Thu Jul 13 10:24:08 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Guinevere Larsen X-Patchwork-Id: 72627 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 9A1783857012 for ; Thu, 13 Jul 2023 10:25:14 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 9A1783857012 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1689243914; bh=0F0ZraJtP41/p8Lx2nRdJ/Ywc5aAkOsksBD+o9lsH6A=; h=To:Cc:Subject:Date:In-Reply-To:References:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=cgBxajrJ4/Xe909KWqBr2kLhAbkAsxfTlijFqFTR9X0DMQxIG7sVOBw9B2VB0kcSb FjWN4H/S/evX+28zehmLNvDnIK+1WVZLgwugZRcyk9jHYwJTt4vT5tW/SOcbMJC9I4 02GUgwz5XpoLhl+GVf9ZUDso/2xeADXg7KoE6Ong= X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by sourceware.org (Postfix) with ESMTPS id 4C853385B513 for ; Thu, 13 Jul 2023 10:24:30 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 4C853385B513 Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-217-mr_6jePNPX2g0ALkXBP_Ww-1; Thu, 13 Jul 2023 06:24:23 -0400 X-MC-Unique: mr_6jePNPX2g0ALkXBP_Ww-1 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.rdu2.redhat.com [10.11.54.1]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 1DDD688D1B2 for ; Thu, 13 Jul 2023 10:24:23 +0000 (UTC) Received: from fedora.redhat.com (unknown [10.45.226.146]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 9AFDA40C2063; Thu, 13 Jul 2023 10:24:22 +0000 (UTC) To: gdb-patches@sourceware.org Cc: Bruno Larsen Subject: [PATCH v4 1/4] gdb/cli: Factor out code to list lines around a given line Date: Thu, 13 Jul 2023 12:24:08 +0200 Message-ID: <20230713102411.2279542-2-blarsen@redhat.com> In-Reply-To: <20230713102411.2279542-1-blarsen@redhat.com> References: <20230713102411.2279542-1-blarsen@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.1 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-Spam-Status: No, score=-11.5 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Bruno Larsen via Gdb-patches From: Guinevere Larsen Reply-To: Bruno Larsen Errors-To: gdb-patches-bounces+patchwork=sourceware.org@sourceware.org Sender: "Gdb-patches" A future patch will add more situations that calculates "lines around a certain point" to be printed using print_source_lines, and the logic could be re-used. As a preparation for those commits, this one factors out that part of the logic of the list command into its own function. No functional changes are expected --- gdb/cli/cli-cmds.c | 36 +++++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/gdb/cli/cli-cmds.c b/gdb/cli/cli-cmds.c index 638c138e7cb..00977bc2ee3 100644 --- a/gdb/cli/cli-cmds.c +++ b/gdb/cli/cli-cmds.c @@ -1200,6 +1200,28 @@ pipe_command_completer (struct cmd_list_element *ignore, we don't know how to complete. */ } +/* Helper for the list_command function. Prints the lines around (and + including) line stored in CURSAL. ARG contains the arguments used in + the command invocation, and is used to determine a special case when + printing backwards. */ +static void +list_around_line (const char *arg, symtab_and_line cursal) +{ + int first; + + first = std::max (cursal.line - get_lines_to_list () / 2, 1); + + /* A small special case --- if listing backwards, and we + should list only one line, list the preceding line, + instead of the exact line we've just shown after e.g., + stopping for a breakpoint. */ + if (arg != NULL && arg[0] == '-' + && get_lines_to_list () == 1 && first > 1) + first -= 1; + + print_source_lines (cursal.symtab, source_lines_range (first), 0); +} + static void list_command (const char *arg, int from_tty) { @@ -1221,19 +1243,7 @@ list_command (const char *arg, int from_tty) source line, center the listing around that line. */ if (get_first_line_listed () == 0) { - int first; - - first = std::max (cursal.line - get_lines_to_list () / 2, 1); - - /* A small special case --- if listing backwards, and we - should list only one line, list the preceding line, - instead of the exact line we've just shown after e.g., - stopping for a breakpoint. */ - if (arg != NULL && arg[0] == '-' - && get_lines_to_list () == 1 && first > 1) - first -= 1; - - print_source_lines (cursal.symtab, source_lines_range (first), 0); + list_around_line (arg, cursal); } /* "l" or "l +" lists next ten lines. */ From patchwork Thu Jul 13 10:24:09 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Guinevere Larsen X-Patchwork-Id: 72625 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id DCD033853D17 for ; Thu, 13 Jul 2023 10:25:08 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org DCD033853D17 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1689243908; bh=MglaCZkLLtqBPVaDCvl56pnU6PSm9mffQ5PPGQGf0vE=; h=To:Cc:Subject:Date:In-Reply-To:References:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=F6gazIvSqWPmyoakVWThLfVfkXOnoWEgyxmSIOYAagKxZkKTby0RbqMQv3GP0kAIr 7+mI24ifVvx5CszIDaeXSHXoTunycExdLV35J5AwVVBmobCUyhdmgguI01s4NGsqUA yQJWHvqmH/cwW9JH0lmv6ucr9ke490pcU1HRZgOs= X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by sourceware.org (Postfix) with ESMTPS id C1409385AF88 for ; Thu, 13 Jul 2023 10:24:28 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org C1409385AF88 Received: from mimecast-mx02.redhat.com (66.187.233.73 [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-219-XRhHV8VfO_yA9M0-qApbGw-1; Thu, 13 Jul 2023 06:24:24 -0400 X-MC-Unique: XRhHV8VfO_yA9M0-qApbGw-1 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.rdu2.redhat.com [10.11.54.1]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id CB13D3C0BE2F for ; Thu, 13 Jul 2023 10:24:23 +0000 (UTC) Received: from fedora.redhat.com (unknown [10.45.226.146]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 54F2B40C2063; Thu, 13 Jul 2023 10:24:23 +0000 (UTC) To: gdb-patches@sourceware.org Cc: Bruno Larsen Subject: [PATCH v4 2/4] gdb/cli: add '.' as an argument for 'list' command Date: Thu, 13 Jul 2023 12:24:09 +0200 Message-ID: <20230713102411.2279542-3-blarsen@redhat.com> In-Reply-To: <20230713102411.2279542-1-blarsen@redhat.com> References: <20230713102411.2279542-1-blarsen@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.1 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-Spam-Status: No, score=-11.8 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Bruno Larsen via Gdb-patches From: Guinevere Larsen Reply-To: Bruno Larsen Errors-To: gdb-patches-bounces+patchwork=sourceware.org@sourceware.org Sender: "Gdb-patches" Currently, after the user has used the list command once, there is no self-contained way to ask GDB to print the location where the inferior is stopped. The current best options require either using a separate command to scope out where the inferior is stopped, or using "list *$pc" requiring knowledge of GDB standard registers. This commit adds a way to do that using '.' as a new argument for the 'list' command. If the inferior isn't running, the command prints around the main function. Because this necessitated having the inferior running and the test was (seemingly unnecessarily) using printf in a non-essential way and it would make the resulting log harder to read for no benefit, it was replaced by a differen t statement. Reviewed-By: Eli Zaretskii --- gdb/NEWS | 4 ++++ gdb/cli/cli-cmds.c | 31 ++++++++++++++++++++++++-- gdb/doc/gdb.texinfo | 5 +++++ gdb/testsuite/gdb.base/list.exp | 39 +++++++++++++++++++++++++++++++++ gdb/testsuite/gdb.base/list1.c | 2 +- 5 files changed, 78 insertions(+), 3 deletions(-) diff --git a/gdb/NEWS b/gdb/NEWS index b924834d3d7..eef440a5242 100644 --- a/gdb/NEWS +++ b/gdb/NEWS @@ -84,6 +84,10 @@ is 64k. To print longer strings you should increase 'max-value-size'. +* The 'list' command now accepts '.' as an argument, which tells GDB to + print the location where the inferior is stopped. If the inferior hasn't + started yet, the command will print around the main function. + * New commands maintenance print record-instruction [ N ] diff --git a/gdb/cli/cli-cmds.c b/gdb/cli/cli-cmds.c index 00977bc2ee3..1c459afdc97 100644 --- a/gdb/cli/cli-cmds.c +++ b/gdb/cli/cli-cmds.c @@ -1234,14 +1234,14 @@ list_command (const char *arg, int from_tty) const char *p; /* Pull in the current default source line if necessary. */ - if (arg == NULL || ((arg[0] == '+' || arg[0] == '-') && arg[1] == '\0')) + if (arg == NULL || ((arg[0] == '+' || arg[0] == '-' || arg[0] == '.') && arg[1] == '\0')) { set_default_source_symtab_and_line (); symtab_and_line cursal = get_current_source_symtab_and_line (); /* If this is the first "list" since we've set the current source line, center the listing around that line. */ - if (get_first_line_listed () == 0) + if (get_first_line_listed () == 0 && (arg == nullptr || arg[0] != '.')) { list_around_line (arg, cursal); } @@ -1263,6 +1263,32 @@ list_command (const char *arg, int from_tty) print_source_lines (cursal.symtab, range, 0); } + /* "l ." lists the default location again. */ + else if (arg[0] == '.') + { + try + { + /* Find the current line by getting the PC of the currently + selected frame, and finding the line associated to it. */ + frame_info_ptr frame = get_selected_frame (nullptr); + CORE_ADDR curr_pc = get_frame_pc (frame); + cursal = find_pc_line (curr_pc, 0); + } + catch (const gdb_exception &e) + { + /* If there was an exception above, it means the inferior + is not running, so reset the current source location to + the default. */ + clear_current_source_symtab_and_line (); + set_default_source_symtab_and_line (); + cursal = get_current_source_symtab_and_line (); + } + list_around_line (arg, cursal); + /* Advance argument so just pressing "enter" after using "list ." + will print the following lines instead of the same lines again. */ + arg++; + } + return; } @@ -2770,6 +2796,7 @@ and send its output to SHELL_COMMAND.")); = add_com ("list", class_files, list_command, _("\ List specified function or line.\n\ With no argument, lists ten more lines after or around previous listing.\n\ +\"list .\" lists ten lines arond where the inferior is stopped.\n\ \"list -\" lists the ten lines before a previous ten-line listing.\n\ One argument specifies a line, and ten lines are listed around that line.\n\ Two arguments with comma between specify starting and ending lines to list.\n\ diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index b10c06ae91f..7619efe3de9 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -9148,6 +9148,11 @@ Stack}), this prints lines centered around that line. @item list - Print lines just before the lines last printed. + +@item list . +Print the lines surrounding the location that is where the inferior +is stopped. If the inferior is not running, print around the main +function instead. @end table @cindex @code{list}, how many lines to display diff --git a/gdb/testsuite/gdb.base/list.exp b/gdb/testsuite/gdb.base/list.exp index 18ecd13ac0f..ed178a1dd95 100644 --- a/gdb/testsuite/gdb.base/list.exp +++ b/gdb/testsuite/gdb.base/list.exp @@ -400,6 +400,42 @@ proc test_list_invalid_args {} { "second use of \"list +INVALID\"" } +proc test_list_current_location {} { + global binfile + # If the first "list" command that GDB runs is "list ." GDB may be + # unable to recognize that the inferior isn't running, so we should + # reload the inferior to test that condition. + clean_restart + gdb_file_cmd ${binfile} + + # Ensure that we are printing 10 lines + if {![set_listsize 10]} { + return + } + + # First guarantee that GDB prints around the main function correctly + gdb_test "list ." \ + "1.*\r\n2\[ \t\]+\r\n3\[ \t\]+int main \[)(\]+.*5\[ \t\]+int x;.*" \ + "list . with inferior not running" + + if {![runto_main]} { + warning "couldn't start inferior" + return + } + + # Walk forward some lines + gdb_test "until 15" ".*15.*foo.*" + + # Test that the correct location is printed and that + # using just "list" will print the following lines. + gdb_test "list ." ".*" "list current line after starting" + gdb_test "list" ".*" "confirm we are printing the following lines" + + # Test that list . will reset to current location + gdb_test "list ." ".*" "list around current line again" + gdb_test " " ".*" "testing repeated invocations with GDB's auto-repeat" +} + clean_restart gdb_file_cmd ${binfile} @@ -519,4 +555,7 @@ test_list "list -" 10 2 "7-8" "5-6" # the current line. test_list "list -" 10 1 "7" "6" +# Test printing the location where the inferior is stopped. +test_list_current_location + remote_exec build "rm -f list0.h" diff --git a/gdb/testsuite/gdb.base/list1.c b/gdb/testsuite/gdb.base/list1.c index d694495c3fb..9297f958f46 100644 --- a/gdb/testsuite/gdb.base/list1.c +++ b/gdb/testsuite/gdb.base/list1.c @@ -7,7 +7,7 @@ void bar (int x) - - */ { - printf ("%d\n", x); + x++; long_line (); } From patchwork Thu Jul 13 10:24:10 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Guinevere Larsen X-Patchwork-Id: 72628 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 31379385E45D for ; Thu, 13 Jul 2023 10:25:17 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 31379385E45D DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1689243917; bh=1A4AJHTKm3e+AjqHXUfSqSTXt6Y8lW6JJliDqPcWK2w=; h=To:Cc:Subject:Date:In-Reply-To:References:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=jC7oX8uQe2Eq0LbJCqgMWFThmb0ETkv4+Phy8QHXLF+RfuFoa0CtA5QBoDa0k/Z9u q3+EQYW0/QvbmYofyzrDTp2mFMktb4TYfS+H7JgLr58td1vl/34RH6P1utG0SCYDe2 VPTIneyBZmbbwtkybRpwsyWb3Kml4vbYrhpii9Aw= X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTPS id 92856385AF82 for ; Thu, 13 Jul 2023 10:24:26 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 92856385AF82 Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-620-HaDF6GAZNY-0bUvUn3ibqQ-1; Thu, 13 Jul 2023 06:24:24 -0400 X-MC-Unique: HaDF6GAZNY-0bUvUn3ibqQ-1 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.rdu2.redhat.com [10.11.54.1]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 86891800B35 for ; Thu, 13 Jul 2023 10:24:24 +0000 (UTC) Received: from fedora.redhat.com (unknown [10.45.226.146]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 0F08440C2063; Thu, 13 Jul 2023 10:24:23 +0000 (UTC) To: gdb-patches@sourceware.org Cc: Bruno Larsen Subject: [PATCH v4 3/4] gdb/cli: Improve UX when using list with no args Date: Thu, 13 Jul 2023 12:24:10 +0200 Message-ID: <20230713102411.2279542-4-blarsen@redhat.com> In-Reply-To: <20230713102411.2279542-1-blarsen@redhat.com> References: <20230713102411.2279542-1-blarsen@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.1 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-Spam-Status: No, score=-15.6 required=5.0 tests=BAYES_00, DKIM_INVALID, DKIM_SIGNED, GIT_PATCH_0, KAM_DMARC_NONE, KAM_DMARC_STATUS, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Bruno Larsen via Gdb-patches From: Guinevere Larsen Reply-To: Bruno Larsen Errors-To: gdb-patches-bounces+patchwork=sourceware.org@sourceware.org Sender: "Gdb-patches" When using "list" with no arguments, GDB will first print the lines around where the inferior is stopped, then print the next N lines until reaching the end of file, at which point it wanrs the user "Line X out of range, file Y only has X-1 lines.". This is usually desireable, but if the user can no longer see the original line, they may have forgotten the current line or that a list command was used at all, making GDB's error message look cryptic. It was reported in bugzilla as PR cli/30497. This commit improves the user experince by changing the behavior of "list" slightly when a user passes no arguments. It now prints that the end of the file has been reached and recommends that the user use the command "list ." instead. Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30497 Reviewed-By: Eli Zaretskii --- gdb/NEWS | 5 +++++ gdb/cli/cli-cmds.c | 17 +++++++++++++---- gdb/doc/gdb.texinfo | 4 +++- gdb/source.c | 16 ++++++++++++++++ gdb/source.h | 7 +++++++ gdb/testsuite/gdb.base/list.exp | 8 ++++---- 6 files changed, 48 insertions(+), 9 deletions(-) diff --git a/gdb/NEWS b/gdb/NEWS index eef440a5242..df26606c9a8 100644 --- a/gdb/NEWS +++ b/gdb/NEWS @@ -88,6 +88,11 @@ print the location where the inferior is stopped. If the inferior hasn't started yet, the command will print around the main function. +* Using the 'list' command with no arguments in a situation where the + command would attempt to list past the end of the file now warns the + user that the end of file has been reached, refers the user to the + newly added '.' argument + * New commands maintenance print record-instruction [ N ] diff --git a/gdb/cli/cli-cmds.c b/gdb/cli/cli-cmds.c index 1c459afdc97..5f5933e7963 100644 --- a/gdb/cli/cli-cmds.c +++ b/gdb/cli/cli-cmds.c @@ -1246,10 +1246,19 @@ list_command (const char *arg, int from_tty) list_around_line (arg, cursal); } - /* "l" or "l +" lists next ten lines. */ - else if (arg == NULL || arg[0] == '+') - print_source_lines (cursal.symtab, - source_lines_range (cursal.line), 0); + /* "l" and "l +" lists the next few lines, unless we're listing past + the end of the file. */ + else if (arg == nullptr || arg[0] == '+') + { + if (last_symtab_line (cursal.symtab) >= cursal.line) + print_source_lines (cursal.symtab, + source_lines_range (cursal.line), 0); + else + { + error (_("End of the file was already reached, use \"list .\" to" + " list the current location again")); + } + } /* "l -" lists previous ten lines, the ones before the ten just listed. */ diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index 7619efe3de9..20c9b24400d 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -9144,7 +9144,9 @@ Print more lines. If the last lines printed were printed with a @code{list} command, this prints lines following the last lines printed; however, if the last line printed was a solitary line printed as part of displaying a stack frame (@pxref{Stack, ,Examining the -Stack}), this prints lines centered around that line. +Stack}), this prints lines centered around that line. If no +@code{list} command has been used and no solitary line was printed, +it prints the lines around the function @code{main}. @item list - Print lines just before the lines last printed. diff --git a/gdb/source.c b/gdb/source.c index 9997cccb31b..08adc6671b7 100644 --- a/gdb/source.c +++ b/gdb/source.c @@ -1484,6 +1484,22 @@ print_source_lines (struct symtab *s, source_lines_range line_range, line_range.stopline (), flags); } +/* See source.h. */ + +int +last_symtab_line (struct symtab *s) +{ + const std::vector *offsets; + + /* Try to get the offsets for the start of each line. */ + if (!g_source_cache.get_line_charpos (s, &offsets)) + return false; + if (offsets == nullptr) + return false; + + return offsets->size (); +} + /* Print info on range of pc's in a specified line. */ diff --git a/gdb/source.h b/gdb/source.h index 8fbc365680d..be80e003890 100644 --- a/gdb/source.h +++ b/gdb/source.h @@ -192,6 +192,13 @@ class source_lines_range int m_stopline; }; +/* Get the number of the last line in the given symtab. */ +extern int last_symtab_line (struct symtab *s); + +/* Check if the line LINE can be found in the symtab S, so that it can be + printed. */ +extern bool can_print_line (struct symtab *s, int line); + /* Variation of previous print_source_lines that takes a range instead of a start and end line number. */ extern void print_source_lines (struct symtab *s, source_lines_range r, diff --git a/gdb/testsuite/gdb.base/list.exp b/gdb/testsuite/gdb.base/list.exp index ed178a1dd95..582355996b0 100644 --- a/gdb/testsuite/gdb.base/list.exp +++ b/gdb/testsuite/gdb.base/list.exp @@ -175,8 +175,8 @@ proc_with_prefix test_list_forward {} { "list 25-34" gdb_test "list" "35\[ \t\]+foo \\(.*\\);.*${last_line_re}" \ "list 35-42" - gdb_test "list" "Line number 44 out of range; \[^\r\n\]+ has 43 lines\." \ - "end of file error after \"list\" command" + gdb_test "list" "End of the file was already reached, use \"list .\" to list the current location again" \ + "list past end of file" } # Test that repeating the list linenum command doesn't print the same @@ -194,8 +194,8 @@ proc_with_prefix test_repeat_list_command {} { "list 25-34" gdb_test " " "35\[ \t\]+foo \\(.*\\);.*${last_line_re}" \ "list 35-42" - gdb_test "list" "Line number 44 out of range; \[^\r\n\]+ has 43 lines\." \ - "end of file error after using 'return' to repeat the list command" + gdb_test "list" "End of the file was already reached, use \"list .\" to list the current location again" \ + "list past end of file" } proc_with_prefix test_list_backwards {} { From patchwork Thu Jul 13 10:24:11 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Guinevere Larsen X-Patchwork-Id: 72629 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id B7DF23854831 for ; Thu, 13 Jul 2023 10:25:44 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org B7DF23854831 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1689243944; bh=uqjLjFwBHsQEzsz5J8OrcDQHV+ev+Az95yp3gIPS840=; h=To:Cc:Subject:Date:In-Reply-To:References:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=H3kojM3iRlxRENyPMuDOSceQ0rrWNnAzBS/VqS5jo72g3oiEd6ej1sj0VkjprHxPG eFSQPpfzdJTs74iSJ/Lgdn2jwopUi7hwcndHFuIMBkFSRVldRR6CRb4KLw0ok92m4L 7KPZfh84GI/lz/nHzOZDUwCXo8FiPP2MZAYHeKOc= X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTPS id 86489385AFBC for ; Thu, 13 Jul 2023 10:24:27 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 86489385AFBC Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-14-TSSLZRRXO-SO1mYGl-mQVA-1; Thu, 13 Jul 2023 06:24:25 -0400 X-MC-Unique: TSSLZRRXO-SO1mYGl-mQVA-1 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.rdu2.redhat.com [10.11.54.1]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 5D0438564EF; Thu, 13 Jul 2023 10:24:25 +0000 (UTC) Received: from fedora.redhat.com (unknown [10.45.226.146]) by smtp.corp.redhat.com (Postfix) with ESMTPS id BDA6740C206F; Thu, 13 Jul 2023 10:24:24 +0000 (UTC) To: gdb-patches@sourceware.org Cc: Bruno Larsen , Eli Zaretskii Subject: [PATCH v4 4/4] gdb/doc: document '+' argument for 'list' command Date: Thu, 13 Jul 2023 12:24:11 +0200 Message-ID: <20230713102411.2279542-5-blarsen@redhat.com> In-Reply-To: <20230713102411.2279542-1-blarsen@redhat.com> References: <20230713102411.2279542-1-blarsen@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.1 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-Spam-Status: No, score=-11.5 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Bruno Larsen via Gdb-patches From: Guinevere Larsen Reply-To: Bruno Larsen Errors-To: gdb-patches-bounces+patchwork=sourceware.org@sourceware.org Sender: "Gdb-patches" The command 'list' has accepted the argument '+' for many years already, but this option wasn't documented either in the texinfo docs or in the help text for the command. This commit documents it. Reviewed-By: Eli Zaretskii --- gdb/cli/cli-cmds.c | 1 + gdb/doc/gdb.texinfo | 3 +++ 2 files changed, 4 insertions(+) diff --git a/gdb/cli/cli-cmds.c b/gdb/cli/cli-cmds.c index 5f5933e7963..418b04212eb 100644 --- a/gdb/cli/cli-cmds.c +++ b/gdb/cli/cli-cmds.c @@ -2806,6 +2806,7 @@ and send its output to SHELL_COMMAND.")); List specified function or line.\n\ With no argument, lists ten more lines after or around previous listing.\n\ \"list .\" lists ten lines arond where the inferior is stopped.\n\ +\"list +\" lists the ten lines following a previous ten-line listing.\n\ \"list -\" lists the ten lines before a previous ten-line listing.\n\ One argument specifies a line, and ten lines are listed around that line.\n\ Two arguments with comma between specify starting and ending lines to list.\n\ diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index 20c9b24400d..cd86da50f46 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -9148,6 +9148,9 @@ Stack}), this prints lines centered around that line. If no @code{list} command has been used and no solitary line was printed, it prints the lines around the function @code{main}. +@item list + +Same as using with no arguments. + @item list - Print lines just before the lines last printed.