From d044bac8ce5e6737d13e7e5180f5a5641053e690 Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Fri, 24 Nov 2017 15:21:16 +0000 Subject: [PATCH] Document linespec/explicit locations & completion improvements (manual + NEWS) gdb/ChangeLog: 2017-11-24 Pedro Alves * NEWS: Mention linespecs and explicit locations, and completion improvements. gdb/doc/ChangeLog: 2017-11-24 Pedro Alves * gdb.texinfo (Completion): Update need-quoting examples. Remove false claim that GDB inserts quoting automatically. (Symbols): Add anchor. --- gdb/ChangeLog | 5 ++++ gdb/NEWS | 29 +++++++++++++++++++++ gdb/doc/ChangeLog | 6 +++++ gdb/doc/gdb.texinfo | 62 +++++++++++++++++++++++++++++---------------- 4 files changed, 80 insertions(+), 22 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index bec84337099..e6762bb92da 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2017-11-24 Pedro Alves + + * NEWS: Mention linespecs and explicit locations, and completion + improvements. + 2017-11-24 Yao Qi * regcache.c (regcache::dump): Remove footnote_register_size. diff --git a/gdb/NEWS b/gdb/NEWS index a239624b827..b2c96eef416 100644 --- a/gdb/NEWS +++ b/gdb/NEWS @@ -23,6 +23,35 @@ the remote inferior is started by the GDBserver, use the "unset environment" command. +* Completion improvements + + ** GDB can now complete function parameters in linespecs and + explicit locations without quoting. When setting breakpoints, + quoting around functions names to help with TAB-completion is + generally no longer necessary. For example, this now completes + correctly: + + (gdb) b function(in[TAB] + (gdb) b function(int) + + Related, GDB is no longer confused with completing functions in + C++ anonymous namespaces: + + (gdb) b (anon[TAB] + (gdb) b (anonymous namespace)::[TAB][TAB] + (anonymous namespace)::a_function() + (anonymous namespace)::b_function() + + ** GDB now has much improved linespec and explicit locations TAB + completion support, that better understands what you're + completing and offers better suggestions. For example, GDB no + longer offers data symbols as possible completions when you're + setting a breakpoint. + + ** GDB now TAB-completes label symbol names. + + ** The "complete" command now mimics TAB completion accurately. + * Python Scripting ** New events gdb.new_inferior, gdb.inferior_deleted, and diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog index 81af3aa632f..62c63f1785e 100644 --- a/gdb/doc/ChangeLog +++ b/gdb/doc/ChangeLog @@ -1,3 +1,9 @@ +2017-11-24 Pedro Alves + + * gdb.texinfo (Completion): Update need-quoting examples. Remove + false claim that GDB inserts quoting automatically. + (Symbols): Add anchor. + 2017-11-22 Ulrich Weigand * gdb.texinfo (Requirements): Document use of GNU MPFR. diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index ab05a3718d6..afaafc0c49f 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -1638,39 +1638,56 @@ its notion of a word. To permit word completion to work in this situation, you may enclose words in @code{'} (single quote marks) in @value{GDBN} commands. -The most likely situation where you might need this is in typing the -name of a C@t{++} function. This is because C@t{++} allows function -overloading (multiple definitions of the same function, distinguished -by argument type). For example, when you want to set a breakpoint you -may need to distinguish whether you mean the version of @code{name} -that takes an @code{int} parameter, @code{name(int)}, or the version -that takes a @code{float} parameter, @code{name(float)}. To use the -word-completion facilities in this situation, type a single quote +A likely situation where you might need this is in typing an +expression that involves a C@t{++} symbol name with template +parameters. This is because when completing expressions, GDB treats +the @samp{<} character as word delimiter, assuming that it's the +less-than comparison operator (@pxref{C Operators, , C and C@t{++} +Operators}). + +For example, when you want to call a C@t{++} template function +interactively using the @code{print} or @code{call} commands, you may +need to distinguish whether you mean the version of @code{name} that +was specialized for @code{int}, @code{name()}, or the version +that was specialized for @code{float}, @code{name()}. To use +the word-completion facilities in this situation, type a single quote @code{'} at the beginning of the function name. This alerts @value{GDBN} that it may need to consider more information than usual when you press @key{TAB} or @kbd{M-?} to request word completion: @smallexample -(@value{GDBP}) b 'bubble( @kbd{M-?} -bubble(double,double) bubble(int,int) -(@value{GDBP}) b 'bubble( +(@value{GDBP}) p 'func< @kbd{M-?} +func() func() +(@value{GDBP}) p 'func< @end smallexample -In some cases, @value{GDBN} can tell that completing a name requires using -quotes. When this happens, @value{GDBN} inserts the quote for you (while -completing as much as it can) if you do not type the quote in the first -place: +When setting breakpoints however (@pxref{Specify Location}), you don't +usually need to type a quote before the function name, because +@value{GDBN} understands that you want to set a breakpoint on a +function: @smallexample -(@value{GDBP}) b bub @key{TAB} -@exdent @value{GDBN} alters your input line to the following, and rings a bell: -(@value{GDBP}) b 'bubble( +(@value{GDBP}) b func< @kbd{M-?} +func() func() +(@value{GDBP}) b func< @end smallexample -@noindent -In general, @value{GDBN} can tell that a quote is needed (and inserts it) if -you have not yet started typing the argument list when you ask for -completion on an overloaded symbol. +This is true even in the case of typing the name of C@t{++} overloaded +functions (multiple definitions of the same function, distinguished by +argument type). For example, when you want to set a breakpoint you +don't need to distinguish whether you mean the version of @code{name} +that takes an @code{int} parameter, @code{name(int)}, or the version +that takes a @code{float} parameter, @code{name(float)}. + +@smallexample +(@value{GDBP}) b bubble( @kbd{M-?} +bubble(int) bubble(double) +(@value{GDBP}) b bubble(dou @kbd{M-?} +bubble(double) +@end smallexample + +See @ref{quoting names} for a description of other scenarios that +require quoting. For more information about overloaded functions, see @ref{C Plus Plus Expressions, ,C@t{++} Expressions}. You can use the command @code{set @@ -16890,6 +16907,7 @@ file-management commands (@pxref{Files, ,Commands to Specify Files}). @cindex symbol names @cindex names of symbols @cindex quoting names +@anchor{quoting names} Occasionally, you may need to refer to symbols that contain unusual characters, which @value{GDBN} ordinarily treats as word delimiters. The most frequent case is in referring to static variables in other -- 2.30.2