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