[gdb] Make execute_command_to_string return string on throw
authorTom de Vries <tdevries@suse.de>
Sat, 9 Oct 2021 16:58:30 +0000 (18:58 +0200)
committerTom de Vries <tdevries@suse.de>
Sat, 9 Oct 2021 16:58:30 +0000 (18:58 +0200)
commit84a6adfd4c7bc9e99a270b8a111da7218a0e89a5
tree2c9335466ee4a93d7d2b907a4e6f3f1a8fecd2af
parentfa9ce2c143ce7ee6bc4f22a0577fe5c0858beddd
[gdb] Make execute_command_to_string return string on throw

The pattern for using execute_command_to_string is:
...
  std::string output;
  output = execute_fn_to_string (fn, term_out);
...

This results in a problem when using it in a try/catch:
...
  try
    {
      output = execute_fn_to_string (fn, term_out)
    }
  catch (const gdb_exception &e)
    {
      /* Use output.  */
    }
...

If an expection was thrown during execute_fn_to_string, then the output
remains unassigned, while it could be worthwhile to known what output was
generated by gdb before the expection was thrown.

Fix this by returning the string using a parameter instead:
...
  execute_fn_to_string (output, fn, term_out)
...

Also add a variant without string parameter, to support places where the
function is used while ignoring the result:
...
  execute_fn_to_string (fn, term_out)
...

Tested on x86_64-linux.
gdb/complaints.c
gdb/gdbcmd.h
gdb/guile/guile.c
gdb/python/python.c
gdb/stack.c
gdb/thread.c
gdb/top.c