Explicit locations: documentation updates

This patch adds documentation for explicit locations to both the
User Manual and gdb's online help system.

gdb/ChangeLog:

	* NEWS: Mention explicit locations.
	* breakpoint.c [LOCATION_HELP_STRING]: New macro.
	[BREAK_ARGS_HELP]: Use LOCATION_HELP_STRING.
	(_initialize_breakpoint): Update documentation for
	"clear", "break", "trace", "strace", "ftrace", and "dprintf".

gdb/doc/ChangeLog:

	* gdb.texinfo (Thread-Specific Breakpoints, Printing Source Lines):
	Use "location(s)"instead of "linespec(s)".
	(Specifying a Location): Rewrite.
	Add subsections describing linespec, address, and explicit locations.
	Add node/menu for each subsection.
	(Source and Machine Code, C Preprocessor Macros)
	(Create and Delete Trace points)
	(Extensions for Ada Tasks): Use "location(s)" instead of "linespec(s)".
	(Continuing at a Different Address): Remove "linespec" examples.
	Add reference to "Specify a Location"
	(The -break-insert Command): Rewrite.  Add anchor.
	Add reference to appropriate manual section discussing locations.
	(The -dprintf-insert Command): Refer to -break-insert for
	specification of 'location'.

gdb/testsuite/ChangeLog:

	* gdb.base/help.exp: Update help_breakpoint_text.
This commit is contained in:
Keith Seitz 2015-08-11 17:09:36 -07:00
parent eb8c4e2e66
commit 629500fae6
7 changed files with 232 additions and 115 deletions

View File

@ -1,3 +1,11 @@
2015-08-11 Keith Seitz <keiths@redhat.com>
* NEWS: Mention explicit locations.
* breakpoint.c [LOCATION_HELP_STRING]: New macro.
[BREAK_ARGS_HELP]: Use LOCATION_HELP_STRING.
(_initialize_breakpoint): Update documentation for
"clear", "break", "trace", "strace", "ftrace", and "dprintf".
2015-08-11 Keith Seitz <keiths@redhat.com>
* mi/mi-cmd-break.c (mi_cmd_break_insert_1): Add support for

View File

@ -8,6 +8,10 @@
* The 'record instruction-history' command now indicates speculative execution
when using the Intel(R) Processor Trace recording format.
* GDB now allows users to specify explicit locations, bypassing
the linespec parser. This feature is also available to GDB/MI
clients.
* New commands
maint set target-non-stop (on|off|auto)

View File

@ -15566,26 +15566,46 @@ all_tracepoints (void)
}
/* This help string is used to consolidate all the help string for specifying
locations used by several commands. */
#define LOCATION_HELP_STRING \
"Linespecs are colon-separated lists of location parameters, such as\n\
source filename, function name, label name, and line number.\n\
Example: To specify the start of a label named \"the_top\" in the\n\
function \"fact\" in the file \"factorial.c\", use\n\
\"factorial.c:fact:the_top\".\n\
\n\
Address locations begin with \"*\" and specify an exact address in the\n\
program. Example: To specify the fourth byte past the start function\n\
\"main\", use \"*main + 4\".\n\
\n\
Explicit locations are similar to linespecs but use an option/argument\n\
syntax to specify location parameters.\n\
Example: To specify the start of the label named \"the_top\" in the\n\
function \"fact\" in the file \"factorial.c\", use \"-source factorial.c\n\
-function fact -label the_top\".\n"
/* This help string is used for the break, hbreak, tbreak and thbreak
commands. It is defined as a macro to prevent duplication.
COMMAND should be a string constant containing the name of the
command. */
#define BREAK_ARGS_HELP(command) \
command" [PROBE_MODIFIER] [LOCATION] [thread THREADNUM] [if CONDITION]\n\
PROBE_MODIFIER shall be present if the command is to be placed in a\n\
probe point. Accepted values are `-probe' (for a generic, automatically\n\
guessed probe type), `-probe-stap' (for a SystemTap probe) or \n\
`-probe-dtrace' (for a DTrace probe).\n\
LOCATION may be a line number, function name, or \"*\" and an address.\n\
If a line number is specified, break at start of code for that line.\n\
If a function is specified, break at start of code for that function.\n\
If an address is specified, break at that exact address.\n\
LOCATION may be a linespec, address, or explicit location as described\n\
below.\n\
\n\
With no LOCATION, uses current execution address of the selected\n\
stack frame. This is useful for breaking on return to a stack frame.\n\
\n\
THREADNUM is the number from \"info threads\".\n\
CONDITION is a boolean expression.\n\
\n\
\n" LOCATION_HELP_STRING "\n\
Multiple breakpoints at one place are permitted, and useful if their\n\
conditions are different.\n\
\n\
@ -16032,20 +16052,17 @@ This command may be abbreviated \"delete\"."),
&deletelist);
add_com ("clear", class_breakpoint, clear_command, _("\
Clear breakpoint at specified line or function.\n\
Argument may be line number, function name, or \"*\" and an address.\n\
If line number is specified, all breakpoints in that line are cleared.\n\
If function is specified, breakpoints at beginning of function are cleared.\n\
If an address is specified, breakpoints at that address are cleared.\n\
Clear breakpoint at specified location.\n\
Argument may be a linespec, explicit, or address location as described below.\n\
\n\
With no argument, clears all breakpoints in the line that the selected frame\n\
is executing in.\n\
\n\
is executing in.\n"
"\n" LOCATION_HELP_STRING "\n\
See also the \"delete\" command which clears breakpoints by number."));
add_com_alias ("cl", "clear", class_breakpoint, 1);
c = add_com ("break", class_breakpoint, break_command, _("\
Set breakpoint at specified line or function.\n"
Set breakpoint at specified location.\n"
BREAK_ARGS_HELP ("break")));
set_cmd_completer (c, location_completer);
@ -16208,7 +16225,7 @@ hardware.)"),
/* Tracepoint manipulation commands. */
c = add_com ("trace", class_breakpoint, trace_command, _("\
Set a tracepoint at specified line or function.\n\
Set a tracepoint at specified location.\n\
\n"
BREAK_ARGS_HELP ("trace") "\n\
Do \"help tracepoints\" for info on other tracepoint commands."));
@ -16220,31 +16237,27 @@ Do \"help tracepoints\" for info on other tracepoint commands."));
add_com_alias ("trac", "trace", class_alias, 1);
c = add_com ("ftrace", class_breakpoint, ftrace_command, _("\
Set a fast tracepoint at specified line or function.\n\
Set a fast tracepoint at specified location.\n\
\n"
BREAK_ARGS_HELP ("ftrace") "\n\
Do \"help tracepoints\" for info on other tracepoint commands."));
set_cmd_completer (c, location_completer);
c = add_com ("strace", class_breakpoint, strace_command, _("\
Set a static tracepoint at specified line, function or marker.\n\
Set a static tracepoint at location or marker.\n\
\n\
strace [LOCATION] [if CONDITION]\n\
LOCATION may be a line number, function name, \"*\" and an address,\n\
or -m MARKER_ID.\n\
If a line number is specified, probe the marker at start of code\n\
for that line. If a function is specified, probe the marker at start\n\
of code for that function. If an address is specified, probe the marker\n\
at that exact address. If a marker id is specified, probe the marker\n\
with that name. With no LOCATION, uses current execution address of\n\
the selected stack frame.\n\
LOCATION may be a linespec, explicit, or address location (described below) \n\
or -m MARKER_ID.\n\n\
If a marker id is specified, probe the marker with that name. With\n\
no LOCATION, uses current execution address of the selected stack frame.\n\
Static tracepoints accept an extra collect action -- ``collect $_sdata''.\n\
This collects arbitrary user data passed in the probe point call to the\n\
tracing library. You can inspect it when analyzing the trace buffer,\n\
by printing the $_sdata variable like any other convenience variable.\n\
\n\
CONDITION is a boolean expression.\n\
\n\
\n" LOCATION_HELP_STRING "\n\
Multiple tracepoints at one place are permitted, and useful if their\n\
conditions are different.\n\
\n\
@ -16396,11 +16409,10 @@ an instruction at any address within the [START-LOCATION, END-LOCATION]\n\
range (including START-LOCATION and END-LOCATION)."));
c = add_com ("dprintf", class_breakpoint, dprintf_command, _("\
Set a dynamic printf at specified line or function.\n\
Set a dynamic printf at specified location.\n\
dprintf location,format string,arg1,arg2,...\n\
location may be a line number, function name, or \"*\" and an address.\n\
If a line number is specified, break at start of code for that line.\n\
If a function is specified, break at start of code for that function."));
location may be a linespec, explicit, or address location.\n"
"\n" LOCATION_HELP_STRING));
set_cmd_completer (c, location_completer);
add_setshow_enum_cmd ("dprintf-style", class_support,

View File

@ -1,3 +1,20 @@
2015-08-11 Keith Seitz <keiths@redhat.com>
* gdb.texinfo (Thread-Specific Breakpoints, Printing Source Lines):
Use "location(s)"instead of "linespec(s)".
(Specifying a Location): Rewrite.
Add subsections describing linespec, address, and explicit locations.
Add node/menu for each subsection.
(Source and Machine Code, C Preprocessor Macros)
(Create and Delete Trace points)
(Extensions for Ada Tasks): Use "location(s)" instead of "linespec(s)".
(Continuing at a Different Address): Remove "linespec" examples.
Add reference to "Specify a Location"
(The -break-insert Command): Rewrite. Add anchor.
Add reference to appropriate manual section discussing locations.
(The -dprintf-insert Command): Refer to -break-insert for
specification of 'location'.
2015-08-07 Pedro Alves <palves@redhat.com>
* gdb.texinfo (Maintenance Commands): Document "maint set/show

View File

@ -6060,9 +6060,9 @@ breakpoints on all threads, or on a particular thread.
@cindex breakpoints and threads
@cindex thread breakpoints
@kindex break @dots{} thread @var{threadno}
@item break @var{linespec} thread @var{threadno}
@itemx break @var{linespec} thread @var{threadno} if @dots{}
@var{linespec} specifies source lines; there are several ways of
@item break @var{location} thread @var{threadno}
@itemx break @var{location} thread @var{threadno} if @dots{}
@var{location} specifies source lines; there are several ways of
writing them (@pxref{Specify Location}), but the effect is always to
specify some source line.
@ -7531,21 +7531,21 @@ argument of @samp{-}; that argument is preserved in repetition so that
each repetition moves up in the source file.
In general, the @code{list} command expects you to supply zero, one or two
@dfn{linespecs}. Linespecs specify source lines; there are several ways
@dfn{locations}. Locations specify source lines; there are several ways
of writing them (@pxref{Specify Location}), but the effect is always
to specify some source line.
Here is a complete description of the possible arguments for @code{list}:
@table @code
@item list @var{linespec}
Print lines centered around the line specified by @var{linespec}.
@item list @var{location}
Print lines centered around the line specified by @var{location}.
@item list @var{first},@var{last}
Print lines from @var{first} to @var{last}. Both arguments are
linespecs. When a @code{list} command has two linespecs, and the
source file of the second linespec is omitted, this refers to
the same source file as the first linespec.
locations. When a @code{list} command has two locations, and the
source file of the second location is omitted, this refers to
the same source file as the first location.
@item list ,@var{last}
Print lines ending with @var{last}.
@ -7566,15 +7566,28 @@ As described in the preceding table.
@node Specify Location
@section Specifying a Location
@cindex specifying location
@cindex linespec
@cindex location
@cindex source location
@menu
* Linespec Locations:: Linespec locations
* Explicit Locations:: Explicit locations
* Address Locations:: Address locations
@end menu
Several @value{GDBN} commands accept arguments that specify a location
of your program's code. Since @value{GDBN} is a source-level
debugger, a location usually specifies some line in the source code;
for that reason, locations are also known as @dfn{linespecs}.
debugger, a location usually specifies some line in the source code.
Locations may be specified using three different formats:
linespec locations, explicit locations, or address locations.
Here are all the different ways of specifying a code location that
@value{GDBN} understands:
@node Linespec Locations
@subsection Linespec Locations
@cindex linespec locations
A @dfn{linespec} is a colon-separated list of source location parameters such
as file name, function name, etc. Here are all the different ways of
specifying a linespec:
@table @code
@item @var{linenum}
@ -7613,25 +7626,93 @@ function name to avoid ambiguity when there are identically named
functions in different source files.
@item @var{label}
Specifies the line at which the label named @var{label} appears.
@value{GDBN} searches for the label in the function corresponding to
the currently selected stack frame. If there is no current selected
stack frame (for instance, if the inferior is not running), then
@value{GDBN} will not search for a label.
Specifies the line at which the label named @var{label} appears
in the function corresponding to the currently selected stack frame.
If there is no current selected stack frame (for instance, if the inferior
is not running), then @value{GDBN} will not search for a label.
@item *@var{address}
Specifies the program address @var{address}. For line-oriented
commands, such as @code{list} and @code{edit}, this specifies a source
line that contains @var{address}. For @code{break} and other
breakpoint oriented commands, this can be used to set breakpoints in
@cindex breakpoint at static probe point
@item -pstap|-probe-stap @r{[}@var{objfile}:@r{[}@var{provider}:@r{]}@r{]}@var{name}
The @sc{gnu}/Linux tool @code{SystemTap} provides a way for
applications to embed static probes. @xref{Static Probe Points}, for more
information on finding and using static probes. This form of linespec
specifies the location of such a static probe.
If @var{objfile} is given, only probes coming from that shared library
or executable matching @var{objfile} as a regular expression are considered.
If @var{provider} is given, then only probes from that provider are considered.
If several probes match the spec, @value{GDBN} will insert a breakpoint at
each one of those probes.
@end table
@node Explicit Locations
@subsection Explicit Locations
@cindex explicit locations
@dfn{Explicit locations} allow the user to directly specify the source
location's parameters using option-value pairs.
Explicit locations are useful when several functions, labels, or
file names have the same name (base name for files) in the program's
sources. In these cases, explicit locations point to the source
line you meant more accurately and unambiguously. Also, using
explicit locations might be faster in large programs.
For example, the linespec @samp{foo:bar} may refer to a function @code{bar}
defined in the file named @file{foo} or the label @code{bar} in a function
named @code{foo}. @value{GDBN} must search either the file system or
the symbol table to know.
The list of valid explicit location options is summarized in the
following table:
@table @code
@item -source @var{filename}
The value specifies the source file name. To differentiate between
files with the same base name, prepend as many directories as is necessary
to uniquely identify the desired file, e.g., @file{foo/bar/baz.c}. Otherwise
@value{GDBN} will use the first file it finds with the given base
name. This option requires the use of either @code{-function} or @code{-line}.
@item -function @var{function}
The value specifies the name of a function. Operations
on function locations unmodified by other options (such as @code{-label}
or @code{-line}) refer to the line that begins the body of the function.
In C, for example, this is the line with the open brace.
@item -label @var{label}
The value specifies the name of a label. When the function
name is not specified, the label is searched in the function of the currently
selected stack frame.
@item -line @var{number}
The value specifies a line offset for the location. The offset may either
be absolute (@code{-line 3}) or relative (@code{-line +3}), depending on
the command. When specified without any other options, the line offset is
relative to the current line.
@end table
Explicit location options may be abbreviated by omitting any non-unique
trailing characters from the option name, e.g., @code{break -s main.c -li 3}.
@node Address Locations
@subsection Address Locations
@cindex address locations
@dfn{Address locations} indicate a specific program address. They have
the generalized form *@var{address}.
For line-oriented commands, such as @code{list} and @code{edit}, this
specifies a source line that contains @var{address}. For @code{break} and
other breakpoint-oriented commands, this can be used to set breakpoints in
parts of your program which do not have debugging information or
source files.
Here @var{address} may be any expression valid in the current working
language (@pxref{Languages, working language}) that specifies a code
address. In addition, as a convenience, @value{GDBN} extends the
semantics of expressions used in locations to cover the situations
that frequently happen during debugging. Here are the various forms
semantics of expressions used in locations to cover several situations
that frequently occur during debugging. Here are the various forms
of @var{address}:
@table @code
@ -7656,22 +7737,6 @@ specify the function unambiguously, e.g., if there are several
functions with identical names in different source files.
@end table
@cindex breakpoint at static probe point
@item -pstap|-probe-stap @r{[}@var{objfile}:@r{[}@var{provider}:@r{]}@r{]}@var{name}
The @sc{gnu}/Linux tool @code{SystemTap} provides a way for
applications to embed static probes. @xref{Static Probe Points}, for more
information on finding and using static probes. This form of linespec
specifies the location of such a static probe.
If @var{objfile} is given, only probes coming from that shared library
or executable matching @var{objfile} as a regular expression are considered.
If @var{provider} is given, then only probes from that provider are considered.
If several probes match the spec, @value{GDBN} will insert a breakpoint at
each one of those probes.
@end table
@node Edit
@section Editing Source Files
@cindex editing source files
@ -7989,9 +8054,9 @@ well as hex.
@table @code
@kindex info line
@item info line @var{linespec}
@item info line @var{location}
Print the starting and ending addresses of the compiled code for
source line @var{linespec}. You can specify source lines in any of
source line @var{location}. You can specify source lines in any of
the ways documented in @ref{Specify Location}.
@end table
@ -8009,7 +8074,7 @@ Line 895 of "builtin.c" starts at pc 0x634c and ends at 0x6350.
@noindent
@cindex code address and its source line
We can also inquire (using @code{*@var{addr}} as the form for
@var{linespec}) what source line covers a particular address:
@var{location}) what source line covers a particular address:
@smallexample
(@value{GDBP}) info line *0x63ff
Line 926 of "builtin.c" starts at pc 0x63e4 and ends at 0x6404.
@ -8119,7 +8184,7 @@ Dump of assembler code from 0x400281 to 0x40028b:
End of assembler dump.
@end smallexample
Addresses cannot be specified as a linespec (@pxref{Specify Location}).
Addresses cannot be specified as a location (@pxref{Specify Location}).
So, for example, if you want to disassemble function @code{bar}
in file @file{foo.c}, you must type @samp{disassemble 'foo.c'::bar}
and not @samp{disassemble foo.c:bar}.
@ -11772,9 +11837,9 @@ argument processing and the beginning of @var{macro} for non C-like macros where
the macro may begin with a hyphen.
@kindex info macros
@item info macros @var{linespec}
@item info macros @var{location}
Show all macro definitions that are in effect at the location specified
by @var{linespec}, and describe the source location or compiler
by @var{location}, and describe the source location or compiler
command-line where those definitions were established.
@kindex macro define
@ -12079,12 +12144,11 @@ conditions and actions.
@kindex trace
@item trace @var{location}
The @code{trace} command is very similar to the @code{break} command.
Its argument @var{location} can be a source line, a function name, or
an address in the target program. @xref{Specify Location}. The
@code{trace} command defines a tracepoint, which is a point in the
target program where the debugger will briefly stop, collect some
data, and then allow the program to continue. Setting a tracepoint or
changing its actions takes effect immediately if the remote stub
Its argument @var{location} can be any valid location.
@xref{Specify Location}. The @code{trace} command defines a tracepoint,
which is a point in the target program where the debugger will briefly stop,
collect some data, and then allow the program to continue. Setting a tracepoint
or changing its actions takes effect immediately if the remote stub
supports the @samp{InstallInTrace} feature (@pxref{install tracepoint
in tracing}).
If remote stub doesn't support the @samp{InstallInTrace} feature, all
@ -15964,14 +16028,14 @@ from the current task to the given task.
#4 0x804aacc in un () at un.adb:5
@end smallexample
@item break @var{linespec} task @var{taskno}
@itemx break @var{linespec} task @var{taskno} if @dots{}
@item break @var{location} task @var{taskno}
@itemx break @var{location} task @var{taskno} if @dots{}
@cindex breakpoints and tasks, in Ada
@cindex task breakpoints, in Ada
@kindex break @dots{} task @var{taskno}@r{ (Ada)}
These commands are like the @code{break @dots{} thread @dots{}}
command (@pxref{Thread Stops}). The
@var{linespec} argument specifies source lines, as described
@var{location} argument specifies source lines, as described
in @ref{Specify Location}.
Use the qualifier @samp{task @var{taskno}} with a breakpoint command
@ -16899,20 +16963,17 @@ an address of your own choosing, with the following commands:
@table @code
@kindex jump
@kindex j @r{(@code{jump})}
@item jump @var{linespec}
@itemx j @var{linespec}
@itemx jump @var{location}
@item jump @var{location}
@itemx j @var{location}
Resume execution at line @var{linespec} or at address given by
@var{location}. Execution stops again immediately if there is a
breakpoint there. @xref{Specify Location}, for a description of the
different forms of @var{linespec} and @var{location}. It is common
Resume execution at @var{location}. Execution stops again immediately
if there is a breakpoint there. @xref{Specify Location}, for a description
of the different forms of @var{location}. It is common
practice to use the @code{tbreak} command in conjunction with
@code{jump}. @xref{Set Breaks, ,Setting Breakpoints}.
The @code{jump} command does not change the current stack frame, or
the stack pointer, or the contents of any memory location or any
register other than the program counter. If line @var{linespec} is in
register other than the program counter. If @var{location} is in
a different function from the one currently executing, the results may
be bizarre if the two functions expect different patterns of arguments or
of local variables. For this reason, the @code{jump} command requests
@ -26851,6 +26912,7 @@ N.A.
@subheading The @code{-break-insert} Command
@findex -break-insert
@anchor{-break-insert}
@subsubheading Synopsis
@ -26863,16 +26925,35 @@ N.A.
@noindent
If specified, @var{location}, can be one of:
@itemize @bullet
@item function
@c @item +offset
@c @item -offset
@c @item linenum
@item filename:linenum
@item filename:function
@item *address
@end itemize
@table @var
@item linespec location
A linespec location. @xref{Linespec Locations}.
@item explicit location
An explicit location. @sc{gdb/mi} explicit locations are
analogous to the CLI's explicit locations using the option names
listed below. @xref{Explicit Locations}.
@table @samp
@item --source @var{filename}
The source file name of the location. This option requires the use
of either @samp{--function} or @samp{--line}.
@item --function @var{function}
The name of a function or method.
@item --label @var{label}
The name of a label.
@item --line @var{lineoffset}
An absolute or relative line offset from the start of the location.
@end table
@item address location
An address location, *@var{address}. @xref{Address Locations}.
@end table
@noindent
The possible optional parameters of this command are:
@table @samp
@ -26964,17 +27045,8 @@ times="0"@}]@}
@end smallexample
@noindent
If specified, @var{location}, can be one of:
@itemize @bullet
@item @var{function}
@c @item +offset
@c @item -offset
@c @item @var{linenum}
@item @var{filename}:@var{linenum}
@item @var{filename}:function
@item *@var{address}
@end itemize
If supplied, @var{location} may be specified the same way as for
the @code{-break-insert} command. @xref{-break-insert}.
The possible optional parameters of this command are:

View File

@ -1,3 +1,7 @@
2015-08-11 Keith Seitz <keiths@redhat.com>
* gdb.base/help.exp: Update help_breakpoint_text.
2015-08-11 Keith Seitz <keiths@redhat.com>
* gdb.mi/mi-break.exp (test_explicit_breakpoints): New proc.

View File

@ -58,7 +58,7 @@ test_class_help "user-defined" {
}
# Test help of an abbreviated command. "break" is picked at random.
set help_breakpoint_text "Set breakpoint at specified line or function\..*"
set help_breakpoint_text "Set breakpoint at specified location\..*"
# test help breakpoint "b" abbreviation
gdb_test "help b" $help_breakpoint_text "help breakpoint \"b\" abbreviation"
# test help breakpoint "br" abbreviation