Files
Guinevere Larsen 1518f2e087 gdb: add "essential" command class
Currently, there is no way for a new user to have an idea of common
useful commands  and behaviors from the GDB interface itself, without
checking the example session in the documentation.  This command class
aims to close that gap by providing a set of quickstart commands that
allows for any simple debug session to happen without anything too
egregious missing.

The set of commands was chosen somewhat arbitrarily, based on what I
used or missed the most.  The one overarching important thing, however,
is that the list is kept short, so as to not overwhelm new users.  This
is confirmed by the newly introduced selftest, essential_command_count,
which ensures there are 20 or fewer essential commands.

Here's the reasoning for some of the choices:
* The command "start" was picked over "run" because combining it with
"continue" achieves the same effect, and I prefer it over needing to set
a breakpoint on main to stop at the start of the inferior.
* The command "ptype" is chosen because I believe it is important to
provide a way for the user to check a variable's type from inside GDB,
and ptype is a more complete command than the alternative, "whatis".

Reviewed-By: Eli Zaretskii <eliz@gnu.org>
Approved-By: Tom Tromey <tom@tromey.com>
2025-11-05 18:17:23 -03:00

129 lines
4.0 KiB
Plaintext

# Copyright 1992-2025 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>. */
# This file was written by Fred Fish. (fnf@cygnus.com)
gdb_exit
gdb_start
gdb_test_no_output "set pagination off"
gdb_test "show pagination" "State of pagination is off.*" "pagination is off"
gdb_test_sequence "help" "unpaged help" {
"List of classes of commands:"
""
"aliases -- User-defined aliases of other commands"
"breakpoints -- Making program stop at certain points"
"data -- Examining data"
"essential -- GDB essential commands"
"files -- Specifying and examining files"
"internals -- Maintenance commands"
"obscure -- Obscure features"
"running -- Running the program"
"stack -- Examining the stack"
"status -- Status inquiries"
"support -- Support facilities"
"tracepoints -- Tracing of program execution without stopping the program"
"user-defined -- User-defined commands"
""
"Type .help. followed by a class name for a list of commands in that class."
"Type .help. followed by command name for full documentation."
"Command name abbreviations are allowed if unambiguous."
}
gdb_test_no_output "set pagination on"
gdb_test "show pagination" "State of pagination is on.*" "pagination is on"
gdb_test_no_output "set height 10"
send_gdb "help\n"
gdb_expect_list "paged help" \
".*$pagination_prompt" {
"List of classes of commands:"
""
"aliases -- User-defined aliases of other commands"
"breakpoints -- Making program stop at certain points"
"data -- Examining data"
"essential -- GDB essential commands"
"files -- Specifying and examining files"
"internals -- Maintenance commands"
"obscure -- Obscure features"
}
gdb_test "q"
gdb_test_no_output "set height 5"
send_gdb "printf \"1\\n2\\n3\\n4\\n5\\n6\\n7\\n8\\n9\\n10\\n11\"\n"
gdb_expect_list "paged count" \
".*$pagination_prompt" {
1
2
3
4
}
send_gdb "c\n"
gdb_expect_list "paged count remainder" "${gdb_prompt} " {
5
6
7
8
9
10
11
}
set fours [string repeat 4 40]
set str "1\\n2\\n3\\n$fours\\n5\\n"
# Avoid some confusing output from readline.
gdb_test_no_output "set editing off"
gdb_test_no_output "set width 30"
send_gdb "printf \"$str\"\n"
gdb_expect_list "paged count for interrupt" \
".*$pagination_prompt" \
[list 1\r\n 2\r\n 3\r\n [string repeat 4 30]]
gdb_test "q" "Quit" "quit while paging"
# Check that width/height of sqrt(INT_MAX) is treated as unlimited, as
# well as "0" and explicit "unlimited".
foreach_with_prefix size {"0" "0x80000000" "unlimited"} {
# Alternate between "non-unlimited" values and "unlimited" values,
# to make sure we're not seeing stale internal state.
gdb_test "set width 200"
gdb_test "show width" \
"Number of characters gdb thinks are in a line is 200\\."
gdb_test "set height 200"
gdb_test "show height" \
"Number of lines gdb thinks are in a page is 200\\."
gdb_test "set width $size"
gdb_test "show width unlimited" \
"Number of characters gdb thinks are in a line is unlimited\\."
gdb_test "set height $size"
gdb_test "show height unlimited" \
"Number of lines gdb thinks are in a page is unlimited\\."
}
gdb_test "set width -1" "integer -1 out of range"
gdb_test "set height -1" "integer -1 out of range"
# A height of 1 used to cause pathological behavior -- it would
# endlessly prompt for paging without printing anything.
gdb_test_no_output "set height 1"
gdb_test "print 23" " = 23"