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.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.