From: Pedro Alves <palves@redhat.com>
To: Yao Qi <yao@codesourcery.com>, gdb-patches@sourceware.org
Subject: Re: [PATCH 2/3] Get GDBserver pid on remote target
Date: Wed, 08 Oct 2014 14:07:00 -0000 [thread overview]
Message-ID: <54354520.4020307@redhat.com> (raw)
In-Reply-To: <1412749679-27076-3-git-send-email-yao@codesourcery.com>
On 10/08/2014 07:27 AM, Yao Qi wrote:
> Hi,
> We see the following fail in the real remote testing...
>
> (gdb) Executing on target: kill -9 29808 (timeout = 300)
> spawn [open ...]^M
> sh: 1: kill: No such process
>
> The test tries to kill gdbserver in this way:
>
> set server_pid [exp_pid -i [board_info target fileid]]
> remote_exec target "kill -9 $server_pid"
>
> in native testing, we'll get the pid of spawned gdbserver, however, in
> remote testing, we'll get the pid of ssh session, since we start
> gdbserver on the remote target through ssh. The pid on build doesn't
> exist on target.
>
> In this patch, we tweak server-kill.c to get the parent pid, which is
> the pid of GDBserver. GDB gets it and kill GDBserver on target.
>
> gdb/testsuite:
>
> 2014-10-08 Yao Qi <yao@codesourcery.com>
>
> * gdb.server/server-kill.c: Include sys/types.h and unistd.h.
> (main): Call getppid.
> * gdb.server/server-kill.exp: Set breakpoint on line "i = 0;"
> and continue to it. Read variable "server_pid".
> ---
> gdb/testsuite/gdb.server/server-kill.c | 10 +++++++++-
> gdb/testsuite/gdb.server/server-kill.exp | 17 ++++++++++++++++-
> 2 files changed, 25 insertions(+), 2 deletions(-)
>
> diff --git a/gdb/testsuite/gdb.server/server-kill.c b/gdb/testsuite/gdb.server/server-kill.c
> index 8a7c74e..8369024b 100644
> --- a/gdb/testsuite/gdb.server/server-kill.c
> +++ b/gdb/testsuite/gdb.server/server-kill.c
> @@ -15,10 +15,18 @@
> You should have received a copy of the GNU General Public License
> along with this program. If not, see <http://www.gnu.org/licenses/>. */
>
> +#include <sys/types.h>
> +#include <unistd.h>
> +
> +int server_pid;
> +
> int
> main (void)
> {
> - int i = 0;
> + int i;
> +
> + server_pid = getppid ();
> + i = 0;
>
> return i;
> }
> diff --git a/gdb/testsuite/gdb.server/server-kill.exp b/gdb/testsuite/gdb.server/server-kill.exp
> index b23c2b5..0f808a9 100644
> --- a/gdb/testsuite/gdb.server/server-kill.exp
> +++ b/gdb/testsuite/gdb.server/server-kill.exp
> @@ -33,7 +33,22 @@ gdb_test "disconnect" ".*"
>
> gdbserver_run ""
>
> -set server_pid [exp_pid -i [board_info target fileid]]
> +# Continue past server_pid assignment.
> +gdb_breakpoint ${srcfile}:[gdb_get_line_number "i = 0;"]
> +gdb_continue_to_breakpoint "after server_pid assignment"
> +
> +# Get the pid of GDBServer.
> +set test "p server_pid"
> +gdb_test_multiple $test $test {
> + -re " = ($decimal)\r\n$gdb_prompt $" {
> + set server_pid $expect_out(1,string)
> + pass $test
> + }
> + -re "$gdb_prompt $" {
> + fail $test
> + return -1
> + }
> +}
If gdb_test_multiple catches an internal error, or a timeout, this
won't return, and below we'll end up using $server_pid without it
being set. So please do the usual (also note "GDBserver" typo):
# Get GDBserver's pid.
set server_pid ""
set test "p server_pid"
gdb_test_multiple $test $test {
-re " = ($decimal)\r\n$gdb_prompt $" {
set server_pid $expect_out(1,string)
pass $test
}
}
if {$server_pid == "" } {
return -1
}
This is OK with that change.
I think mingw doesn't have getppid; so as is this will be losing
coverage there. gnulib doesn't appear to have something we could borrow,
unfortunately. I think we could emulate it with NtQueryInformationProcess,
but it's fine with me to leave it for another pass.
Thanks,
Pedro Alves
next prev parent reply other threads:[~2014-10-08 14:07 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-09-30 13:15 [PATCH] Skip server-kill.exp " Yao Qi
2014-10-07 13:55 ` Yao Qi
2014-10-07 15:21 ` Pedro Alves
2014-10-08 6:32 ` [PATCH 0/3] Tweak server-kill.exp for " Yao Qi
2014-10-08 6:32 ` [PATCH 1/3] Clean up server-kill.exp Yao Qi
2014-10-08 13:48 ` Pedro Alves
2014-10-08 6:32 ` [PATCH 3/3] Use command "monitor set debug 0" to check the connection Yao Qi
2014-10-08 14:19 ` Pedro Alves
2014-10-09 3:05 ` Yao Qi
2014-10-10 9:38 ` Pedro Alves
2014-10-10 13:52 ` Yao Qi
2014-10-10 13:57 ` Pedro Alves
2014-10-08 6:32 ` [PATCH 2/3] Get GDBserver pid on remote target Yao Qi
2014-10-08 14:07 ` Pedro Alves [this message]
2014-10-11 3:20 ` [PATCH 0/3] Tweak server-kill.exp for " Yao Qi
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=54354520.4020307@redhat.com \
--to=palves@redhat.com \
--cc=gdb-patches@sourceware.org \
--cc=yao@codesourcery.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