mirror of https://gitee.com/openkylin/linux.git
perf report: Print out raw events in hexa
Print out events in hexa dump format, when -D is specified: 0x4868 [0x48]: event: 1 . . ... raw event: size 72 bytes . 0000: 01 00 00 00 00 00 48 00 d4 72 00 00 d4 72 00 00 ......H..r...r. . 0010: 00 00 40 f2 3e 00 00 00 00 30 01 00 00 00 00 00 ..@.>....0..... . 0020: 00 00 00 00 00 00 00 00 2f 75 73 72 2f 6c 69 62 ......../usr/li . 0030: 36 34 2f 6c 69 62 65 6c 66 2d 30 2e 31 34 31 2e 64/libelf-0.141 . 0040: 73 6f 00 00 00 00 00 00 f-0.141 . 0x4868 [0x48]: PERF_EVENT_MMAP 29396: [0x3ef2400000(0x13000) @ (nil)]: /usr/lib64/libelf-0.141.so This helps the debugging of mis-parsing of data files, and helps the addition of new sample/trace formats. Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Mike Galbraith <efault@gmx.de> Cc: Paul Mackerras <paulus@samba.org> Cc: Arnaldo Carvalho de Melo <acme@redhat.com> LKML-Reference: <new-submission> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
c17c2db1f3
commit
8465b05046
|
@ -1095,9 +1095,43 @@ process_period_event(event_t *event, unsigned long offset, unsigned long head)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void trace_event(event_t *event)
|
||||
{
|
||||
unsigned char *raw_event = (void *)event;
|
||||
int i, j;
|
||||
|
||||
if (!dump_trace)
|
||||
return;
|
||||
|
||||
dprintf(".\n. ... raw event: size %d bytes\n", event->header.size);
|
||||
|
||||
for (i = 0; i < event->header.size; i++) {
|
||||
if ((i & 15) == 0)
|
||||
dprintf(". %04x: ", i);
|
||||
|
||||
dprintf(" %02x", raw_event[i]);
|
||||
|
||||
if (((i & 15) == 15) || i == event->header.size-1) {
|
||||
dprintf(" ");
|
||||
for (j = 0; j < 15-(i & 15); j++)
|
||||
dprintf(" ");
|
||||
for (j = 0; j < (i & 15); j++) {
|
||||
if (isprint(raw_event[i-15+j]))
|
||||
dprintf("%c", raw_event[i-15+j]);
|
||||
else
|
||||
dprintf(".");
|
||||
}
|
||||
dprintf("\n");
|
||||
}
|
||||
}
|
||||
dprintf(".\n");
|
||||
}
|
||||
|
||||
static int
|
||||
process_event(event_t *event, unsigned long offset, unsigned long head)
|
||||
{
|
||||
trace_event(event);
|
||||
|
||||
if (event->header.misc & PERF_EVENT_MISC_OVERFLOW)
|
||||
return process_overflow_event(event, offset, head);
|
||||
|
||||
|
@ -1204,7 +1238,7 @@ static int __cmd_report(void)
|
|||
|
||||
size = event->header.size;
|
||||
|
||||
dprintf("%p [%p]: event: %d\n",
|
||||
dprintf("\n%p [%p]: event: %d\n",
|
||||
(void *)(offset + head),
|
||||
(void *)(long)event->header.size,
|
||||
event->header.type);
|
||||
|
|
Loading…
Reference in New Issue