#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; }