Skip to content

Commit

Permalink
perf tools: Add dump_stack function
Browse files Browse the repository at this point in the history
To help in debugging the tools, provides functionality roughly similar
to the function with the same name in the kernel.

Copied from glibc backtrace function man page.

Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Namhyung Kim <namhyung@gmail.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/n/tip-6nw2sak21bqy8h1m2syyo816@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
  • Loading branch information
Arnaldo Carvalho de Melo committed Aug 8, 2012
1 parent a7cb886 commit dc4552b
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 0 deletions.
19 changes: 19 additions & 0 deletions tools/perf/util/util.c
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
#include "../perf.h"
#include "util.h"
#include <sys/mman.h>
#include <execinfo.h>
#include <stdio.h>
#include <stdlib.h>

/*
* XXX We need to find a better place for these things...
Expand Down Expand Up @@ -158,3 +161,19 @@ size_t hex_width(u64 v)

return n;
}

/* Obtain a backtrace and print it to stdout. */
void dump_stack(void)
{
void *array[16];
size_t size = backtrace(array, ARRAY_SIZE(array));
char **strings = backtrace_symbols(array, size);
size_t i;

printf("Obtained %zd stack frames.\n", size);

for (i = 0; i < size; i++)
printf("%s\n", strings[i]);

free(strings);
}
2 changes: 2 additions & 0 deletions tools/perf/util/util.h
Original file line number Diff line number Diff line change
Expand Up @@ -266,4 +266,6 @@ size_t hex_width(u64 v);

char *rtrim(char *s);

void dump_stack(void);

#endif

0 comments on commit dc4552b

Please sign in to comment.