diff options
Diffstat (limited to 'emulator/qtools/read_pid.cpp')
-rw-r--r-- | emulator/qtools/read_pid.cpp | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/emulator/qtools/read_pid.cpp b/emulator/qtools/read_pid.cpp new file mode 100644 index 0000000..a2d69d4 --- /dev/null +++ b/emulator/qtools/read_pid.cpp @@ -0,0 +1,71 @@ +#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; +} |