diff options
author | Denys Vlasenko <dvlasenk@redhat.com> | 2013-06-20 11:20:23 +0200 |
---|---|---|
committer | Denys Vlasenko <dvlasenk@redhat.com> | 2013-06-20 11:23:00 +0200 |
commit | 4a9ba989e65c12c50286a8423196236e6bac529d (patch) | |
tree | 8398dcf4b612b17e838b876866bee0eb7e85cda8 /strace.c | |
parent | 725dd425a60af0cd0fa7bb764ae3a122269a70fc (diff) | |
download | strace-4a9ba989e65c12c50286a8423196236e6bac529d.tar.gz strace-4a9ba989e65c12c50286a8423196236e6bac529d.tar.bz2 strace-4a9ba989e65c12c50286a8423196236e6bac529d.tar.xz |
Improve error messages in detach()
* strace.c (detach): Change return type from int to void.
Improve error meesages: show PID, tell exactly which operation fails.
Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
Diffstat (limited to 'strace.c')
-rw-r--r-- | strace.c | 22 |
1 files changed, 9 insertions, 13 deletions
@@ -157,7 +157,7 @@ static const char *progname; unsigned os_release; /* generated from uname()'s u.release */ -static int detach(struct tcb *tcp); +static void detach(struct tcb *tcp); static int trace(void); static void cleanup(void); static void interrupt(int sig); @@ -729,7 +729,7 @@ droptcb(struct tcb *tcp) * attached-unstopped processes give the same ESRCH. For unattached process we * would SIGSTOP it and wait for its SIGSTOP notification forever. */ -static int +static void detach(struct tcb *tcp) { int error; @@ -764,14 +764,14 @@ detach(struct tcb *tcp) } else if (errno != ESRCH) { /* Shouldn't happen. */ - perror_msg("detach: ptrace(PTRACE_DETACH, ...)"); + perror_msg("detach: ptrace(%u,PTRACE_DETACH)", tcp->pid); } else /* ESRCH: process is either not stopped or doesn't exist. */ if (my_tkill(tcp->pid, 0) < 0) { if (errno != ESRCH) /* Shouldn't happen. */ - perror_msg("detach: checking sanity"); + perror_msg("detach: tkill(%u,0)", tcp->pid); /* else: process doesn't exist. */ } else @@ -788,17 +788,15 @@ detach(struct tcb *tcp) error = ptrace(PTRACE_INTERRUPT, tcp->pid, 0, 0); if (!error) interrupt_done = 1; + else if (errno != ESRCH) + perror_msg("detach: ptrace(%u,PTRACE_INTERRUPT)", tcp->pid); } else { error = my_tkill(tcp->pid, SIGSTOP); if (!error) sigstop_expected = 1; - } - if (error && errno != ESRCH) { - if (use_seize) - perror_msg("detach: ptrace(PTRACE_INTERRUPT, ...)"); - else - perror_msg("detach: stopping child"); + else if (errno != ESRCH) + perror_msg("detach: tkill(%u,SIGSTOP)", tcp->pid); } } } @@ -811,7 +809,7 @@ detach(struct tcb *tcp) continue; if (errno == ECHILD) /* Already gone. */ break; - perror_msg("detach: waiting"); + perror_msg("detach: waitpid(%u)", tcp->pid); break; } if (!WIFSTOPPED(status)) { @@ -870,8 +868,6 @@ detach(struct tcb *tcp) fprintf(stderr, "Process %u detached\n", tcp->pid); droptcb(tcp); - - return error; } static void |