Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Lancelot SIX via Gdb-patches <gdb-patches@sourceware.org>
To: gdb-patches@sourceware.org
Cc: Lancelot SIX <lsix@lancelotsix.com>
Subject: [PATCH v4] inferior without argument prints detail of current inferior
Date: Sun, 10 Jan 2021 17:58:24 +0000	[thread overview]
Message-ID: <20210110175824.16110-1-lsix@lancelotsix.com> (raw)
In-Reply-To: <20201218220440.12127-1-lsix@lancelotsix.com>

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


  parent reply	other threads:[~2021-01-10 17:58 UTC|newest]

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

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=20210110175824.16110-1-lsix@lancelotsix.com \
    --to=gdb-patches@sourceware.org \
    --cc=lsix@lancelotsix.com \
    /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