summaryrefslogtreecommitdiff
path: root/strace.c
diff options
context:
space:
mode:
authorDenys Vlasenko <dvlasenk@redhat.com>2013-06-20 11:20:23 +0200
committerDenys Vlasenko <dvlasenk@redhat.com>2013-06-20 11:23:00 +0200
commit4a9ba989e65c12c50286a8423196236e6bac529d (patch)
tree8398dcf4b612b17e838b876866bee0eb7e85cda8 /strace.c
parent725dd425a60af0cd0fa7bb764ae3a122269a70fc (diff)
downloadstrace-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.c22
1 files changed, 9 insertions, 13 deletions
diff --git a/strace.c b/strace.c
index e94ca31..ae24db1 100644
--- a/strace.c
+++ b/strace.c
@@ -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