public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Lancelot SIX <lsix@lancelotsix.com>
To: gdb-patches@sourceware.org
Subject: Re: [PATCH v4] inferior without argument prints detail of current inferior
Date: Tue, 2 Feb 2021 22:44:44 +0000	[thread overview]
Message-ID: <YBnV3DTVpNfQ+STB@Plymouth> (raw)
In-Reply-To: <20210110175824.16110-1-lsix@lancelotsix.com>

Hi,

I have pushed this patch.

I’d like to update https://sourceware.org/gdb/wiki/ProjectIdeas.  To do
so, I need to be in the EditorGroup.  Can a member of the group update
the page or grant me access?

Thanks,
Lancelot.

Le Sun, Jan 10, 2021 at 05:58:24PM +0000, Lancelot SIX a écrit :
> This patch makes the inferior command display information about the
> current inferior when called with no argument. This behavior is similar
> to the one of the thread command.
> 
> This contribution is inspired by an item in
> https://sourceware.org/gdb/wiki/ProjectIdeas
> 
> Before patch:
> 
>     (gdb) info inferior
>       Num  Description       Connection           Executable
>     * 1    process 19221     1 (native)           /home/lsix/tmp/a.out
>       2    process 19239     1 (native)           /home/lsix/tmp/a.out
>     (gdb) inferior 2
>     [Switching to inferior 2 [process 19239] (/home/lsix/tmp/a.out)]
>     [Switching to thread 2.1 (process 19239)]
>     #0  0x0000000000401146 in main ()
>     (gdb) inferior
>     Argument required (expression to compute).
> 
> After patch:
> 
>     (gdb) info inferior
>       Num  Description       Connection           Executable
>     * 1    process 18699     1 (native)           /home/lsix/tmp/a.out
>       2    process 18705     1 (native)           /home/lsix/tmp/a.out
>     (gdb) inferior 2
>     [Switching to inferior 2 [process 18705] (/home/lsix/tmp/a.out)]
>     [Switching to thread 2.1 (process 18705)]
>     #0  0x0000000000401146 in main ()
>     (gdb) inferior
>     [Current inferior is 2 [process 18705] (/home/lsix/tmp/a.out)]
> 
> Changes from V1:
> 	* Add test.
> 
> Change from V2:
> 	* Fix gdb/doc/ChangeLog entry.
> 
> Change from V3:
> 	* Add entry in the NEWS file.
> 	* Improve inferior-noarg.expr and remove assumptions particular
> 	format in pid_to_str.
> 	* Fix copyright year in new files.
> 
> gdb/doc/ChangeLog:
> 
> 	* gdb.texinfo (Inferiors Connections and Programs): Document the
> 	inferior command when used without argument.
> 
> gdb/ChangeLog:
> 
>   * NEWS: Add entry for the behavior change of the inferior command.
> 	* inferior.c (inferior_command): When no argument is given to the
> 	inferior command, display info about the currently selected
> 	inferior.
> 
> gdb/testsuite/ChangeLog:
> 
> 	* gdb.base/inferior-noarg.c: New test.
> 	* gdb.base/inferior-noarg.exp: New test.
> 
> ---
> ---
>  gdb/NEWS                                  |  6 +++
>  gdb/doc/gdb.texinfo                       | 16 +++++++
>  gdb/inferior.c                            | 58 +++++++++++++++--------
>  gdb/testsuite/gdb.base/inferior-noarg.c   | 22 +++++++++
>  gdb/testsuite/gdb.base/inferior-noarg.exp | 36 ++++++++++++++
>  5 files changed, 117 insertions(+), 21 deletions(-)
>  create mode 100644 gdb/testsuite/gdb.base/inferior-noarg.c
>  create mode 100644 gdb/testsuite/gdb.base/inferior-noarg.exp
> 
> diff --git a/gdb/NEWS b/gdb/NEWS
> index 66702862ef..d9788f6733 100644
> --- a/gdb/NEWS
> +++ b/gdb/NEWS
> @@ -75,6 +75,12 @@ maintenance flush-symbol-cache
>    'maintenance flush register-cache' and 'maintenance flush
>    symbol-cache' respectively.
>  
> +inferior [ID]
> +  When the ID parameter is omitted, then this command prints information
> +  about the current inferior.  When the ID parameter is present, the
> +  behavior of the command is unchanged and have the inferior ID become
> +  the current inferior.
> +
>  *** Changes in GDB 10
>  
>  * There are new feature names for ARC targets: "org.gnu.gdb.arc.core"
> diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
> index 69fa6b709b..a97a342e9d 100644
> --- a/gdb/doc/gdb.texinfo
> +++ b/gdb/doc/gdb.texinfo
> @@ -3202,6 +3202,22 @@ For example,
>    2    process 2307      2 (extended-remote host:10000)  hello
>  @end smallexample
>  
> +To get informations about the current inferior, use @code{inferior}:
> +
> +@table @code
> +@kindex inferior
> +@item inferior
> +Shows information about the current inferior.
> +
> +For example,
> +@end table
> +@c end table here to get a little more width for example
> +
> +@smallexample
> +(@value{GDBP}) inferior
> +[Current inferior is 1 [process 3401] (helloworld)]
> +@end smallexample
> +
>  To find out what open target connections exist at any moment, use
>  @w{@code{info connections}}:
>  
> diff --git a/gdb/inferior.c b/gdb/inferior.c
> index 3ff0512c38..49f869a4c7 100644
> --- a/gdb/inferior.c
> +++ b/gdb/inferior.c
> @@ -635,34 +635,50 @@ inferior_command (const char *args, int from_tty)
>    struct inferior *inf;
>    int num;
>  
> -  num = parse_and_eval_long (args);
> -
> -  inf = find_inferior_id (num);
> -  if (inf == NULL)
> -    error (_("Inferior ID %d not known."), num);
> -
> -  if (inf->pid != 0)
> +  if (args == nullptr)
>      {
> -      if (inf != current_inferior ())
> -	{
> -	  thread_info *tp = any_thread_of_inferior (inf);
> -	  if (tp == NULL)
> -	    error (_("Inferior has no threads."));
> +      inf = current_inferior ();
> +      gdb_assert (inf != nullptr);
> +      const char *filename = inf->pspace->exec_filename.get ();
>  
> -	  switch_to_thread (tp);
> -	}
> +      if (filename == nullptr)
> +	filename = _("<noexec>");
>  
> -      gdb::observers::user_selected_context_changed.notify
> -	(USER_SELECTED_INFERIOR
> -	 | USER_SELECTED_THREAD
> -	 | USER_SELECTED_FRAME);
> +      printf_filtered (_("[Current inferior is %d [%s] (%s)]\n"),
> +		       inf->num, inferior_pid_to_str (inf->pid).c_str (),
> +		       filename);
>      }
>    else
>      {
> -      switch_to_inferior_no_thread (inf);
> +      num = parse_and_eval_long (args);
> +
> +      inf = find_inferior_id (num);
> +      if (inf == NULL)
> +	error (_("Inferior ID %d not known."), num);
> +
> +      if (inf->pid != 0)
> +	{
> +	  if (inf != current_inferior ())
> +	    {
> +	      thread_info *tp = any_thread_of_inferior (inf);
> +	      if (tp == NULL)
> +		error (_("Inferior has no threads."));
>  
> -      gdb::observers::user_selected_context_changed.notify
> -	(USER_SELECTED_INFERIOR);
> +	      switch_to_thread (tp);
> +	    }
> +
> +	  gdb::observers::user_selected_context_changed.notify
> +	    (USER_SELECTED_INFERIOR
> +	     | USER_SELECTED_THREAD
> +	     | USER_SELECTED_FRAME);
> +	}
> +      else
> +	{
> +	  switch_to_inferior_no_thread (inf);
> +
> +	  gdb::observers::user_selected_context_changed.notify
> +	    (USER_SELECTED_INFERIOR);
> +	}
>      }
>  }
>  
> diff --git a/gdb/testsuite/gdb.base/inferior-noarg.c b/gdb/testsuite/gdb.base/inferior-noarg.c
> new file mode 100644
> index 0000000000..bfe52c018d
> --- /dev/null
> +++ b/gdb/testsuite/gdb.base/inferior-noarg.c
> @@ -0,0 +1,22 @@
> +/* This testcase is part of GDB, the GNU debugger.
> +
> +   Copyright 2021 Free Software Foundation, Inc.
> +
> +   This program is free software; you can redistribute it and/or modify
> +   it under the terms of the GNU General Public License as published by
> +   the Free Software Foundation; either version 3 of the License, or
> +   (at your option) any later version.
> +
> +   This program is distributed in the hope that it will be useful,
> +   but WITHOUT ANY WARRANTY; without even the implied warranty of
> +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +   GNU General Public License for more details.
> +
> +   You should have received a copy of the GNU General Public License
> +   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
> +
> +int
> +main (void)
> +{
> +  return 0;
> +}
> diff --git a/gdb/testsuite/gdb.base/inferior-noarg.exp b/gdb/testsuite/gdb.base/inferior-noarg.exp
> new file mode 100644
> index 0000000000..65d23fe46e
> --- /dev/null
> +++ b/gdb/testsuite/gdb.base/inferior-noarg.exp
> @@ -0,0 +1,36 @@
> +# Copyright 2021 Free Software Foundation, Inc.
> +
> +# This program is free software; you can redistribute it and/or modify
> +# it under the terms of the GNU General Public License as published by
> +# the Free Software Foundation; either version 3 of the License, or
> +# (at your option) any later version.
> +#
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with this program.  If not, see <http://www.gnu.org/licenses/>.
> +
> +# This test case checks that the 'inferior' command, when given no
> +# argument, displays information about the inferior currently active.
> +
> +standard_testfile
> +
> +if { [prepare_for_testing "failed to prepare" \
> +	${testfile} ${srcfile}] } {
> +    return
> +}
> +
> +gdb_test "inferior" "\[Current inferior is 1 \[<null>\] (.*)\]" "inferior not running"
> +
> +if { ![runto_main] } {
> +    untested "could not run to main"
> +    return
> +}
> +
> +gdb_test "inferior" {\[Current inferior is 1 \[.*\] (.*)\]} "inferior running"
> +gdb_test "clone-inferior" "Added inferior 2.*" "create new inferior"
> +gdb_test "inferior 2" "\[Switching to inferior 2 \[<null>\] (.*)]" "change inferior"
> +gdb_test "inferior" "\[Current inferior is 2 \[<null>\] (.*)\]" "show new inferior"
> -- 
> 2.29.2
> 

-- 
Lancelot SIX

  parent reply	other threads:[~2021-02-02 22:44 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-18 22:04 [PATCH v2] " Lancelot SIX
2020-12-18 22:24 ` Simon Marchi
2021-01-09 21:24   ` [PATCH v3] " Lancelot SIX
2021-01-10 16:00     ` Simon Marchi
2021-01-10 17:37       ` Lancelot SIX
2021-01-11  1:06         ` Simon Marchi
2021-01-10 16:41     ` Eli Zaretskii
2021-01-10 17:38       ` Lancelot SIX
2021-01-10 17:58 ` [PATCH v4] " Lancelot SIX
2021-01-11  1:14   ` Simon Marchi
2021-01-11 14:57     ` Eli Zaretskii
2021-02-02 22:44   ` Lancelot SIX [this message]
2021-02-02 22:59     ` Simon Marchi
2021-02-02 23:04       ` Lancelot SIX
2021-02-02 23:37         ` Simon Marchi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=YBnV3DTVpNfQ+STB@Plymouth \
    --to=lsix@lancelotsix.com \
    --cc=gdb-patches@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).