1#include <stdio.h>
2#include <stdlib.h>
3#include <inttypes.h>
4#include "trace_reader.h"
5
6int main(int argc, char **argv) {
7  if (argc != 2) {
8    fprintf(stderr, "Usage: %s trace_file\n", argv[0]);
9    exit(1);
10  }
11
12  char *trace_filename = argv[1];
13  TraceReaderBase *trace = new TraceReaderBase;
14  trace->Open(trace_filename);
15
16  while (1) {
17    PidEvent event;
18    if (trace->ReadPidEvent(&event))
19      break;
20    switch (event.rec_type) {
21      case kPidFork:
22        printf("t%lld fork tgid %d pid %d\n", event.time, event.tgid, event.pid);
23        break;
24      case kPidClone:
25        printf("t%lld clone tgid %d pid %d\n", event.time, event.tgid, event.pid);
26        break;
27      case kPidSwitch:
28        printf("t%lld switch %d\n", event.time, event.pid);
29        break;
30      case kPidExit:
31        printf("t%lld exit %d\n", event.time, event.pid);
32        break;
33      case kPidMmap:
34        printf("t%lld mmap %08x - %08x, offset %08x '%s'\n",
35               event.time, event.vstart, event.vend, event.offset, event.path);
36        delete[] event.path;
37        break;
38      case kPidMunmap:
39        printf("t%lld munmap %08x - %08x\n",
40               event.time, event.vstart, event.vend);
41        break;
42      case kPidSymbolAdd:
43        printf("t%lld add sym %08x '%s'\n",
44               event.time, event.vstart, event.path);
45        delete[] event.path;
46        break;
47      case kPidSymbolRemove:
48        printf("t%lld remove %08x\n", event.time, event.vstart);
49        break;
50      case kPidExec:
51        printf("t%lld argc: %d\n", event.time, event.argc);
52        for (int ii = 0; ii < event.argc; ++ii) {
53          printf("  argv[%d]: %s\n", ii, event.argv[ii]);
54          delete[] event.argv[ii];
55        }
56        delete[] event.argv;
57        break;
58      case kPidKthreadName:
59        printf("t%lld kthread tgid %d pid %d %s\n",
60               event.time, event.tgid, event.pid, event.path);
61        delete[] event.path;
62        break;
63      case kPidName:
64        printf("t%lld name %d %s\n",
65               event.time, event.pid, event.path);
66        delete[] event.path;
67        break;
68    }
69  }
70  return 0;
71}
72