Re: Breakpoint commands in MI mode and "backtrace"
Eli Zaretskii <[email protected]>
| Newsgroups | gmane.comp.gdb.devel |
|---|---|
| Message-ID | <[email protected]> |
> Cc: [email protected] > From: Simon Marchi <[email protected]> > Date: Sun, 8 Oct 2017 15:24:21 -0400 > > But here's the equivalent version with the corresponding cleanup, > that applies on the 8.0 branch: > > diff --git a/gdb/cli/cli-script.c b/gdb/cli/cli-script.c > index f1db954a69..34ae4966de 100644 > --- a/gdb/cli/cli-script.c > +++ b/gdb/cli/cli-script.c > @@ -472,6 +472,8 @@ print_command_trace (const char *cmd) > printf_filtered ("%s\n", cmd); > } > > +static void restore_interp (void *arg); > + > enum command_control_type > execute_control_command (struct command_line *cmd) > { > @@ -491,8 +493,14 @@ execute_control_command (struct command_line *cmd) > { > /* A simple command, execute it and return. */ > std::string new_line = insert_user_defined_cmd_args (cmd->line); > - execute_command (&new_line[0], 0); > + > + struct interp *old_interp = interp_set_temp (INTERP_CONSOLE); > + struct cleanup *old_chain = make_cleanup (restore_interp, old_interp); > + > + current_interpreter ()->exec (&new_line[0]); > ret = cmd->control_type; > + > + do_cleanups (old_chain); > break; > } Thanks, this works, but it seems to fail hookpost hooks. The Emacs .gdbinit file defines a hookpost-backtrace command to produce a Lisp-level backtrace, and with this change that fails: ~"Lisp Backtrace:\n" &"Argument to arithmetic operation not a number or boolean.\n" &"Argument to arithmetic operation not a number or boolean.\n" &"Argument to arithmetic operation not a number or boolean.\n" &"Argument to arithmetic operation not a number or boolean.\n" &"Argument to arithmetic operation not a number or boolean.\n" &"Argument to arithmetic operation not a number or boolean.\n" &"Argument to arithmetic operation not a number or boolean.\n" &"Argument to arithmetic operation not a number or boolean.\n" &"Argument to arithmetic operation not a number or boolean.\n" &"Argument to arithmetic operation not a number or boolean.\n" &"Argument to arithmetic operation not a number or boolean.\n" &"Argument to arithmetic operation not a number or boolean.\n" &"Argument to arithmetic operation not a number or boolean.\n" &"Argument to arithmetic operation not a number or boolean.\n" &"Argument to arithmetic operation not a number or boolean.\n" &"Argument to arithmetic operation not a number or boolean.\n" Whereas without the patch, the C-level backtrace is not shown, but the Lisp-level backtrace is shown correctly: ~"Lisp Backtrace:\n" ~"\"redraw-display\"" ~" (0x82de90)\n" ~"\"funcall-interactively\"" ~" (0x82de88)\n" ~"\"call-interactively\"" ~" (0x82e1e0)\n" ~"\"command-execute\"" ~" (0x82e738)\n" ~"\"execute-extended-command\"" ~" (0x82ee20)\n" ~"\"funcall-interactively\"" ~" (0x82ee18)\n" ~"\"call-interactively\"" ~" (0x82f220)\n" ~"\"command-execute\"" ~" (0x82f748)\n" > > In any case, there are more instances of calls to execute_command in > > that function, and I guess they all need to be changed like that? > > I don't see any other call. You are right, sorry. Thanks.