From 84a6adfd4c7bc9e99a270b8a111da7218a0e89a5 Mon Sep 17 00:00:00 2001 From: Tom de Vries Date: Sat, 9 Oct 2021 18:58:30 +0200 Subject: [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/python/python.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'gdb/python') diff --git a/gdb/python/python.c b/gdb/python/python.c index 451c5bd..264f7c8 100644 --- a/gdb/python/python.c +++ b/gdb/python/python.c @@ -1924,11 +1924,11 @@ namespace selftests { static void test_python () { -#define CMD execute_command_to_string ("python print(5)", 0, true); +#define CMD(S) execute_command_to_string (S, "python print(5)", 0, true) std::string output; - output = CMD; + CMD (output); SELF_CHECK (output == "5\n"); output.clear (); @@ -1937,7 +1937,7 @@ test_python () = make_scoped_restore (&gdb_python_initialized, 0); try { - output = CMD; + CMD (output); } catch (const gdb_exception &e) { -- cgit v1.1