| #include <stdio.h> | 
 | #include <stdlib.h> | 
 | #include <inttypes.h> | 
 | #include "trace_reader.h" | 
 |  | 
 | int main(int argc, char **argv) { | 
 |   if (argc != 2) { | 
 |     fprintf(stderr, "Usage: %s trace_file\n", argv[0]); | 
 |     exit(1); | 
 |   } | 
 |  | 
 |   char *trace_filename = argv[1]; | 
 |   TraceReaderBase *trace = new TraceReaderBase; | 
 |   trace->Open(trace_filename); | 
 |  | 
 |   while (1) { | 
 |     PidEvent event; | 
 |     if (trace->ReadPidEvent(&event)) | 
 |       break; | 
 |     switch (event.rec_type) { | 
 |       case kPidFork: | 
 |         printf("t%lld fork tgid %d pid %d\n", event.time, event.tgid, event.pid); | 
 |         break; | 
 |       case kPidClone: | 
 |         printf("t%lld clone tgid %d pid %d\n", event.time, event.tgid, event.pid); | 
 |         break; | 
 |       case kPidSwitch: | 
 |         printf("t%lld switch %d\n", event.time, event.pid); | 
 |         break; | 
 |       case kPidExit: | 
 |         printf("t%lld exit %d\n", event.time, event.pid); | 
 |         break; | 
 |       case kPidMmap: | 
 |         printf("t%lld mmap %08x - %08x, offset %08x '%s'\n", | 
 |                event.time, event.vstart, event.vend, event.offset, event.path); | 
 |         delete[] event.path; | 
 |         break; | 
 |       case kPidMunmap: | 
 |         printf("t%lld munmap %08x - %08x\n", | 
 |                event.time, event.vstart, event.vend); | 
 |         break; | 
 |       case kPidSymbolAdd: | 
 |         printf("t%lld add sym %08x '%s'\n", | 
 |                event.time, event.vstart, event.path); | 
 |         delete[] event.path; | 
 |         break; | 
 |       case kPidSymbolRemove: | 
 |         printf("t%lld remove %08x\n", event.time, event.vstart); | 
 |         break; | 
 |       case kPidExec: | 
 |         printf("t%lld argc: %d\n", event.time, event.argc); | 
 |         for (int ii = 0; ii < event.argc; ++ii) { | 
 |           printf("  argv[%d]: %s\n", ii, event.argv[ii]); | 
 |           delete[] event.argv[ii]; | 
 |         } | 
 |         delete[] event.argv; | 
 |         break; | 
 |       case kPidKthreadName: | 
 |         printf("t%lld kthread tgid %d pid %d %s\n", | 
 |                event.time, event.tgid, event.pid, event.path); | 
 |         delete[] event.path; | 
 |         break; | 
 |       case kPidName: | 
 |         printf("t%lld name %d %s\n", | 
 |                event.time, event.pid, event.path); | 
 |         delete[] event.path; | 
 |         break; | 
 |     } | 
 |   } | 
 |   return 0; | 
 | } |