binutils-gdb/gdb/cli
Andrew Burgess b20885b0a4 gdb: add a custom command completer for disassemble command
Add a new command completer function for the disassemble command.
There are two things that this completion function changes.  First,
after the previous commit, the new function calls skip_over_slash_fmt,
which means that hitting tab after entering a /OPT flag now inserts a
space ready to start typing the address to disassemble at:

  (gdb) disassemble /r<TAB>
  (gdb) disassemble /r <CURSOR>

But also, we now get symbol completion after a /OPT option set,
previously this would do nothing:

  (gdb) disassemble /r mai<TAB>

But now:

  (gdb) disassemble /r mai<TAB>
  (gdb) disassemble /r main <CURSOR>

Which was my main motivation for working on this commit.

However, I have made a second change in the completion function.
Currently, the disassemble command calls the generic
location_completer function, however, the disassemble docs say:

     Note that the 'disassemble' command's address arguments are specified
  using expressions in your programming language (*note Expressions:
  Expressions.), not location specs (*note Location Specifications::).
  So, for example, if you want to disassemble function 'bar' in file
  'foo.c', you must type 'disassemble 'foo.c'::bar' and not 'disassemble
  foo.c:bar'.

And indeed, if I try:

  (gdb) disassemble hello.c:main
  No symbol "hello" in current context.
  (gdb) disassemble hello.c::main
  No symbol "hello" in current context.
  (gdb) disassemble 'hello.c'::main
  Dump of assembler code for function main:
  ... snip ...

But, if I do this:

  (gdb) disassemble hell<TAB>
  (gdb) disassemble hello.c:<CURSOR>

which is a consequence of using the location_completer function.  So
in this commit, after calling skip_over_slash_fmt, I forward the bulk
of the disassemble command completion to expression_completer.  Now
when I try this:

  (gdb) disassemble hell<TAB>

gives nothing, which I think is an improvement.  There is one slight
disappointment, if I do:

  (gdb) disassemble 'hell<TAB>

I still get nothing.  I had hoped that this would expand to:
'hello.c':: but I guess this is a limitation of the current
expression_completer implementation, however, I don't think this is a
regression, the previous expansion was just wrong.  Fixing
expression_completer is out of scope for this commit.

I've added some disassembler command completion tests, and also a test
that disassembling using 'FILE'::FUNC syntax works, as I don't think
that is tested anywhere.
2023-11-08 11:18:40 +00:00
..
cli-cmds.c gdb: add a custom command completer for disassemble command 2023-11-08 11:18:40 +00:00
cli-cmds.h
cli-decode.c [gdb] Fix more typos 2023-06-05 12:53:15 +02:00
cli-decode.h
cli-dump.c gdb: remove target_gdbarch 2023-10-10 10:44:35 -04:00
cli-interp.c Remove explanatory comments from includes 2023-09-20 11:45:16 -06:00
cli-interp.h gdb: add interp::on_user_selected_context_changed method 2023-05-30 15:07:26 -04:00
cli-logging.c
cli-option.c
cli-option.h
cli-script.c gdb: move struct ui and related things to ui.{c,h} 2023-05-01 15:40:54 -04:00
cli-script.h
cli-setshow.c Use std::string in do_set_command 2023-06-20 07:52:28 -06:00
cli-setshow.h
cli-style.c
cli-style.h
cli-utils.c
cli-utils.h