From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from beryx.lancelotsix.com (beryx.lancelotsix.com [164.132.98.193]) by sourceware.org (Postfix) with ESMTPS id 234FB3854809 for ; Fri, 18 Dec 2020 22:06:05 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 234FB3854809 Received: from gwenhwyvar.int.quiet-oceans.com (unknown [IPv6:2a02:390:8443:0:cb1:61e0:48a4:af18]) by beryx.lancelotsix.com (Postfix) with ESMTPSA id B45C42E070; Fri, 18 Dec 2020 23:06:03 +0100 (CET) From: Lancelot SIX To: gdb-patches@sourceware.org Cc: Lancelot SIX Subject: [PATCH v2] inferior without argument prints detail of current inferior Date: Fri, 18 Dec 2020 22:04:40 +0000 Message-Id: <20201218220440.12127-1-lsix@lancelotsix.com> X-Mailer: git-send-email 2.29.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Greylist: Sender succeeded SMTP AUTH, not delayed by milter-greylist-4.5.11 (beryx.lancelotsix.com [0.0.0.0]); Fri, 18 Dec 2020 23:06:03 +0100 (CET) X-Spam-Status: No, score=-14.1 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 18 Dec 2020 22:06:07 -0000 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)] My copyright assignment request is currently in progress. gdb/doc/ChangeLog: 2020-12-16 Lancelot SIX * gdb.texinfo: Document the inferior command when used without argument gdb/ChangeLog: 2020-12-16 Lancelot SIX * inferior.c (inferior_command): When no argument is given to the inferior command, display info about the currently selected inferior. gdb/testsuite/ChangeLog: 2020-12-16 Lancelot SIX * gdb.base/inferior-noarg.c: New test. * gdb.base/inferior-noarg.exp: New test. --- 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 ++++++++++++++ 4 files changed, 111 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/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index 5b6ac8549b..c9ee0b87f2 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 a6652b6920..9bd6629af9 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 = _(""); - 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..9d7b2f1a4c --- /dev/null +++ b/gdb/testsuite/gdb.base/inferior-noarg.c @@ -0,0 +1,22 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020 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 . */ + +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..38842aa7d8 --- /dev/null +++ b/gdb/testsuite/gdb.base/inferior-noarg.exp @@ -0,0 +1,36 @@ +# Copyright 2020 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 . + +# 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 \[\] (.*)\]" "inferior not running" + +if { ![runto_main] } { + untested "could not run to main" + return +} + +gdb_test "inferior" "\[Current inferior is 1 \[process .*\] (.*)\]" "inferior running" +gdb_test "clone-inferior" "Added inferior 2.*" "create new inferior" +gdb_test "inferior 2" "\[Switching to inferior 2 \[\] (.*)]" "change inferior" +gdb_test "inferior" "\[Current inferior is 2 \[\] (.*)\]" "show new inferior" -- 2.29.2