Messages in this thread Patch in this message | | | From | Changbin Du <> | Subject | [PATCH v2 2/2] perf: add support for logging debug messages to file | Date | Sun, 22 Sep 2019 10:38:23 +0800 |
| |
When in TUI mode, it is impossible to show all the debug messages to console. This make it hard to debug perf issues using debug messages. This patch adds support for logging debug messages to file to resolve this problem.
The usage is: perf -debug verbose=2,file=~/perf.log COMMAND
Signed-off-by: Changbin Du <changbin.du@gmail.com> --- tools/perf/Documentation/perf.txt | 14 ++++++++------ tools/perf/util/debug.c | 22 +++++++++++++++++++++- 2 files changed, 29 insertions(+), 7 deletions(-)
diff --git a/tools/perf/Documentation/perf.txt b/tools/perf/Documentation/perf.txt index c05a94b2488e..b2084a93210d 100644 --- a/tools/perf/Documentation/perf.txt +++ b/tools/perf/Documentation/perf.txt @@ -16,14 +16,16 @@ OPTIONS Setup debug variable (see list below) in value range (0, 10). Use like: --debug verbose # sets verbose = 1 - --debug verbose=2 # sets verbose = 2 + --debug verbose=2,file=~/perf.log + # sets verbose = 2 and save log to file List of debug variables allowed to set: - verbose=level - general debug messages - ordered-events=level - ordered events object debug messages - data-convert=level - data convert command debug messages - stderr - write debug output (option -v) to stderr - in browser mode + verbose=level - general debug messages + ordered-events=level - ordered events object debug messages + data-convert=level - data convert command debug messages + stderr - write debug output (option -v) to stderr + in browser mode + file=path - write debug output to log file --buildid-dir:: Setup buildid cache directory. It has higher priority than diff --git a/tools/perf/util/debug.c b/tools/perf/util/debug.c index ae6eb6d1c695..f62d87ab79d5 100644 --- a/tools/perf/util/debug.c +++ b/tools/perf/util/debug.c @@ -6,6 +6,7 @@ #include <stdarg.h> #include <stdio.h> #include <stdlib.h> +#include <errno.h> #include <sys/wait.h> #include <api/debug.h> #include <linux/kernel.h> @@ -28,6 +29,7 @@ int verbose; bool dump_trace = false, quiet = false; int debug_ordered_events; static bool redirect_to_stderr; +static FILE *log_file; int debug_data_convert; int veprintf(int level, int var, const char *fmt, va_list args) @@ -39,6 +41,9 @@ int veprintf(int level, int var, const char *fmt, va_list args) ui_helpline__vshow(fmt, args); else ret = vfprintf(stderr, fmt, args); + + if (log_file) + vfprintf(log_file, fmt, args); } return ret; @@ -220,7 +225,22 @@ int perf_debug_option(const char *str) debug_data_convert = str2loglevel(vstr); else if (!strcmp(opt, "stderr")) redirect_to_stderr = true; - else { + else if (!strcmp(opt, "file")) { + if (!vstr) + vstr = (char *)"perf.log"; + + if (log_file) + fclose(log_file); + + log_file = fopen(vstr, "a"); + if (!log_file) { + pr_err("Can not create log file: %s\n", + strerror(errno)); + free(dstr); + return -1; + } + fprintf(log_file, "\n===========perf log===========\n"); + } else { fprintf(stderr, "unkown debug option '%s'\n", opt); free(dstr); return -1; -- 2.20.1
| |