diff options
-rw-r--r-- | gdb/NEWS | 5 | ||||
-rw-r--r-- | gdb/cli/cli-cmds.c | 18 | ||||
-rw-r--r-- | gdb/doc/gdb.texinfo | 6 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/list.exp | 24 |
4 files changed, 28 insertions, 25 deletions
@@ -90,8 +90,9 @@ expression parser. * 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. + print the location around the point of execution within the current frame. + If the inferior hasn't started yet, the command will print around the + beginning of 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 diff --git a/gdb/cli/cli-cmds.c b/gdb/cli/cli-cmds.c index 0fa24fd..b801e21 100644 --- a/gdb/cli/cli-cmds.c +++ b/gdb/cli/cli-cmds.c @@ -1272,10 +1272,10 @@ list_command (const char *arg, int from_tty) print_source_lines (cursal.symtab, range, 0); } - /* "l ." lists the default location again. */ + /* "list ." lists the default location again. */ else if (arg[0] == '.') { - try + if (target_has_stack ()) { /* Find the current line by getting the PC of the currently selected frame, and finding the line associated to it. */ @@ -1283,19 +1283,19 @@ list_command (const char *arg, int from_tty) CORE_ADDR curr_pc = get_frame_pc (frame); cursal = find_pc_line (curr_pc, 0); } - catch (const gdb_exception &e) + else { - /* If there was an exception above, it means the inferior - is not running, so reset the current source location to - the default. */ + /* The inferior is not running, so reset the current source + location to the default (usually the main function). */ 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 ." + /* Set the repeat args so just pressing "enter" after using "list ." will print the following lines instead of the same lines again. */ - arg++; + if (from_tty) + set_repeat_arguments (""); } return; @@ -2805,9 +2805,9 @@ 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 following a previous ten-line listing.\n\ \"list -\" lists the ten lines before a previous ten-line listing.\n\ +\"list .\" lists ten lines around the point of execution in the current frame.\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\ Lines can be specified in these ways:\n\ diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index aa3c677..5db30bf 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -9212,9 +9212,9 @@ Same as using with no arguments. 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. +Print the lines surrounding the point of execution within the +currently selected frame. If the inferior is not running, print lines +around the start of 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 5823559..306fe41 100644 --- a/gdb/testsuite/gdb.base/list.exp +++ b/gdb/testsuite/gdb.base/list.exp @@ -402,18 +402,15 @@ proc test_list_invalid_args {} { 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 + # Reload the inferior to test "list ." before the inferior is started. gdb_file_cmd ${binfile} - # Ensure that we are printing 10 lines + # Ensure that we are printing 10 lines. if {![set_listsize 10]} { return } - # First guarantee that GDB prints around the main function correctly + # 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" @@ -423,17 +420,22 @@ proc test_list_current_location {} { return } - # Walk forward some lines + # 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" + gdb_test "list ." "10\[ \t\]+foo \(.*\);.*19\[ \t\]+foo \(.*\);" \ + "list current line after starting" + gdb_test "list" "20\[ \t\]+foo \(.*\);.*29\[ \t\]+foo \(.*\);" \ + "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" + # and that an empty line lists the following lines. + gdb_test "list ." "10\[ \t\]+foo \(.*\);.*19\[ \t\]+foo \(.*\);" \ + "list around current line again" + gdb_test " " "20\[ \t\]+foo \(.*\);.*29\[ \t\]+foo \(.*\);" \ + "testing repeated invocations with GDB's auto-repeat" } clean_restart |