There are only 3 kind of '+++' signals in strace.
Note: Currently do NOT support the '<unfinished...>/<resumed>' in
JSON format. And this will make the those JSON lines invalid(or you can
just ignore these lines). Need to find a way to solve this problem.

* process.c(sys_exit): slightly reformat the code.
* syscall.c(trace_syscall_exiting): slightly reformat the code.
* strace.c(printleader, trace):
Add support for 'superseded', 'killed' and 'exited' signals.
---
 process.c |  2 +-
 strace.c  | 26 ++++++++++++++++++++++----
 syscall.c |  5 ++---
 3 files changed, 25 insertions(+), 8 deletions(-)

diff --git a/process.c b/process.c
index 93678ad..8b4b1b8 100644
--- a/process.c
+++ b/process.c
@@ -261,7 +261,7 @@ sys_exit(struct tcb *tcp)
        tprintf("%ld) ", tcp->u_arg[0]);
        tabto();
        tprintf("= %s\n", "?");
-       json_event(JSON_ARG, JSON_ARGS_END, JSON_SEPA, JSON_RET, JSON_CALL_END 
,JSON_NEWLINE);
+       json_event(JSON_ARG, JSON_ARGS_END, JSON_SEPA, JSON_RET, JSON_CALL_END, 
JSON_NEWLINE);
        line_ended();
        return 0;
 }
diff --git a/strace.c b/strace.c
index deb636b..b973823 100644
--- a/strace.c
+++ b/strace.c
@@ -627,6 +627,7 @@ printleader(struct tcb *tcp)
                         * didn't finish ("SIGKILL nuked us after syscall 
entry" etc).
                         */
                        tprints(" <unfinished ...>\n");
+                       json_event(JSON_NEWLINE);
                        printing_tcp->curcol = 0;
                }
        }
@@ -2249,7 +2250,12 @@ trace(void)
                        tcp->pid = pid;
                        if (cflag != CFLAG_ONLY_STATS) {
                                printleader(tcp);
-                               tprintf("+++ superseded by execve in pid %lu 
+++\n", old_pid);
+                               tprintf("+++ %s %s %lu +++\n", "superseded", 
"by execve in pid", old_pid);
+                               json_event(
+                                               JSON_SIGNAL_BEGIN, JSON_SEPA,
+                                               JSON_DESC, JSON_SEPA,
+                                               JSON_AUXSTR, JSON_SEPA,
+                                               JSON_SIGCODE, JSON_SIGNAL_END, 
JSON_NEWLINE);
                                line_ended();
                                tcp->flags |= TCB_REPRINT;
                        }
@@ -2278,12 +2284,23 @@ trace(void)
                        ) {
                                printleader(tcp);
 #ifdef WCOREDUMP
-                               tprintf("+++ killed by %s %s+++\n",
+                               tprintf("+++ %s by %s %s+++\n",
+                                       "killed",
                                        signame(WTERMSIG(status)),
                                        WCOREDUMP(status) ? "(core dumped) " : 
"");
+                               json_event(
+                                               JSON_SIGNAL_BEGIN, JSON_SEPA,
+                                               JSON_DESC, JSON_SEPA,
+                                               JSON_AUXSTR, JSON_SEPA,
+                                               JSON_SIGCODE, JSON_SIGNAL_END, 
JSON_NEWLINE);
 #else
-                               tprintf("+++ killed by %s +++\n",
+                               tprintf("+++ %s by %s +++\n",
+                                       "killed",
                                        signame(WTERMSIG(status)));
+                               json_event(
+                                               JSON_SIGNAL_BEGIN, JSON_SEPA,
+                                               JSON_DESC, JSON_SEPA,
+                                               JSON_SIGCODE, JSON_SIGNAL_END, 
JSON_NEWLINE);
 #endif
                                line_ended();
                        }
@@ -2296,7 +2313,8 @@ trace(void)
                        if (cflag != CFLAG_ONLY_STATS &&
                            qflag < 2) {
                                printleader(tcp);
-                               tprintf("+++ exited with %d +++\n", 
WEXITSTATUS(status));
+                               tprintf("+++ %s with %d +++\n", "exited", 
WEXITSTATUS(status));
+                               json_event(JSON_SIGNAL_BEGIN, JSON_SEPA, 
JSON_DESC, JSON_SEPA, JSON_SIGCODE, JSON_SIGNAL_END, JSON_NEWLINE);
                                line_ended();
                        }
                        droptcb(tcp);
diff --git a/syscall.c b/syscall.c
index 19e0b6e..ff951e6 100644
--- a/syscall.c
+++ b/syscall.c
@@ -2580,8 +2580,7 @@ trace_syscall_exiting(struct tcb *tcp)
                tprintf(") = %s <%s>\n", "?", "unavailable");
                json_event(JSON_ARGS_END, JSON_SEPA,
                                          JSON_RET, JSON_SEPA,
-                                         JSON_DESC,
-                                         JSON_CALL_END , JSON_NEWLINE);
+                                         JSON_DESC, JSON_CALL_END, 
JSON_NEWLINE);
                tabto();
                line_ended();
                tcp->flags &= ~TCB_INSYSCALL;
@@ -2754,7 +2753,7 @@ trace_syscall_exiting(struct tcb *tcp)
                        (long) tv.tv_sec, (long) tv.tv_usec);
        }
        tprints("\n");
-       json_event(JSON_CALL_END , JSON_NEWLINE);
+       json_event(JSON_CALL_END, JSON_NEWLINE);
        dumpio(tcp);
        line_ended();
 
-- 
1.9.1


------------------------------------------------------------------------------
Want fast and easy access to all the code in your enterprise? Index and
search up to 200,000 lines of code with a free copy of Black Duck
Code Sight - the same software that powers the world's largest code
search on Ohloh, the Black Duck Open Hub! Try it now.
http://p.sf.net/sfu/bds
_______________________________________________
Strace-devel mailing list
Strace-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/strace-devel

Reply via email to