Hi Jiri, On Mon, 14 Jul 2014 23:46:50 +0200, Jiri Olsa wrote: > Adding --debug option as a way to setup debug variables. > Starting with support for verbose, more will come. > > It's possible to use it now with report command: > $ perf --debug verbose ... > $ perf --debug verbose=2 ... > > I'll need this support to add separated debug variable > for ordered events change in order to separate debug > output out of standard verbose stream. > > Cc: Arnaldo Carvalho de Melo <a...@kernel.org> > Cc: Corey Ashford <cjash...@linux.vnet.ibm.com> > Cc: David Ahern <dsah...@gmail.com> > Cc: Frederic Weisbecker <fweis...@gmail.com> > Cc: Ingo Molnar <mi...@kernel.org> > Cc: Namhyung Kim <namhy...@kernel.org> > Cc: Paul Mackerras <pau...@samba.org> > Cc: Peter Zijlstra <a.p.zijls...@chello.nl> > Signed-off-by: Jiri Olsa <jo...@kernel.org> > --- > tools/perf/Documentation/perf-report.txt | 6 +++++ > tools/perf/Documentation/perf.txt | 10 +++++++- > tools/perf/perf.c | 13 +++++++++- > tools/perf/util/debug.c | 44 > ++++++++++++++++++++++++++++++++ > tools/perf/util/debug.h | 2 ++ > 5 files changed, 73 insertions(+), 2 deletions(-) > > diff --git a/tools/perf/Documentation/perf-report.txt > b/tools/perf/Documentation/perf-report.txt > index d2b59af62bc0..53b6ad8e4d4d 100644 > --- a/tools/perf/Documentation/perf-report.txt > +++ b/tools/perf/Documentation/perf-report.txt > @@ -25,6 +25,12 @@ OPTIONS > --verbose:: > Be more verbose. (show symbol address, etc) > > +--debug:: > + Setup debug variable (just verbose for now) in value > + range (0, 10). Use like: > + --debug verbose # sets verbose = 1 > + --debug verbose=2 # sets verbose = 2 > + > -n:: > --show-nr-samples:: > Show the number of samples for each symbol > diff --git a/tools/perf/Documentation/perf.txt > b/tools/perf/Documentation/perf.txt > index 0eeb247dc7d2..c75a42822c53 100644 > --- a/tools/perf/Documentation/perf.txt > +++ b/tools/perf/Documentation/perf.txt > @@ -8,7 +8,15 @@ perf - Performance analysis tools for Linux > SYNOPSIS > -------- > [verse] > -'perf' [--version] [--help] COMMAND [ARGS] > +'perf' [--version] [--debug variable[=VALUE]] [--help] COMMAND [ARGS]
Hmm.. is this really needed? Also, there're other options might be added here. What about just saying 'perf' [--version] [--help] [OPTIONS] COMMAND [ARGS] ? Thanks, Namhyung > + > +OPTIONS > +------- > +--debug:: > + Setup debug variable (just verbose for now) in value > + range (0, 10). Use like: > + --debug verbose # sets verbose = 1 > + --debug verbose=2 # sets verbose = 2 > > DESCRIPTION > ----------- > diff --git a/tools/perf/perf.c b/tools/perf/perf.c > index 95c58fc15284..eed3fb2a3af0 100644 > --- a/tools/perf/perf.c > +++ b/tools/perf/perf.c > @@ -13,11 +13,12 @@ > #include "util/quote.h" > #include "util/run-command.h" > #include "util/parse-events.h" > +#include "util/debug.h" > #include <api/fs/debugfs.h> > #include <pthread.h> > > const char perf_usage_string[] = > - "perf [--version] [--help] COMMAND [ARGS]"; > + "perf [--version] [--debug variable[=VALUE]] [--help] COMMAND [ARGS]"; > > const char perf_more_info_string[] = > "See 'perf help COMMAND' for more information on a specific command."; > @@ -212,6 +213,16 @@ static int handle_options(const char ***argv, int *argc, > int *envchanged) > printf("%s ", p->cmd); > } > exit(0); > + } else if (!strcmp(cmd, "--debug")) { > + if (*argc < 2) { > + fprintf(stderr, "No variable specified for > --debug.\n"); > + usage(perf_usage_string); > + } > + if (perf_debug_option((*argv)[1])) > + usage(perf_usage_string); > + > + (*argv)++; > + (*argc)--; > } else { > fprintf(stderr, "Unknown option: %s\n", cmd); > usage(perf_usage_string); > diff --git a/tools/perf/util/debug.c b/tools/perf/util/debug.c > index c208d6f56e63..71d419362634 100644 > --- a/tools/perf/util/debug.c > +++ b/tools/perf/util/debug.c > @@ -105,3 +105,47 @@ void trace_event(union perf_event *event) > } > printf(".\n"); > } > + > +static struct debug_variable { > + const char *name; > + int *ptr; > +} debug_variables[] = { > + { .name = "verbose", .ptr = &verbose }, > + { .name = NULL, } > +}; > + > +int perf_debug_option(const char *str) > +{ > + struct debug_variable *var = &debug_variables[0]; > + char *vstr, *s = strdup(str); > + int v = 1; > + > + vstr = strchr(s, '='); > + if (vstr) > + *vstr++ = 0; > + > + while (var->name) { > + if (!strcmp(s, var->name)) > + break; > + var++; > + } > + > + if (!var->name) { > + pr_err("Unknown debug variable name '%s'\n", s); > + free(s); > + return -1; > + } > + > + if (vstr) { > + v = atoi(vstr); > + /* > + * Allow only values in range (0, 10), > + * otherwise set 0. > + */ > + v = (v < 0) || (v > 10) ? 0 : v; > + } > + > + *var->ptr = v; > + free(s); > + return 0; > +} > diff --git a/tools/perf/util/debug.h b/tools/perf/util/debug.h > index 1cb808123242..89fb6b0f7ab2 100644 > --- a/tools/perf/util/debug.h > +++ b/tools/perf/util/debug.h > @@ -39,4 +39,6 @@ void pr_stat(const char *fmt, ...); > > int eprintf(int level, int var, const char *fmt, ...) > __attribute__((format(printf, 3, 4))); > > +int perf_debug_option(const char *str); > + > #endif /* __PERF_DEBUG_H */ -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/