diff options
author | James McCoy <jamessan@jamessan.com> | 2017-08-09 13:30:34 -0400 |
---|---|---|
committer | James McCoy <jamessan@jamessan.com> | 2017-08-09 13:30:34 -0400 |
commit | 17eb20b22ef9fe5e621a4b6eff1c1a83e9489645 (patch) | |
tree | 6d73941ec5e687c694d6a2e2a5a33ef0bdc1a46a /src/nvim/log.c | |
parent | e13b4a21cac9d173885249034fe20fb209b157df (diff) | |
download | rneovim-17eb20b22ef9fe5e621a4b6eff1c1a83e9489645.tar.gz rneovim-17eb20b22ef9fe5e621a4b6eff1c1a83e9489645.tar.bz2 rneovim-17eb20b22ef9fe5e621a4b6eff1c1a83e9489645.zip |
log: Add log_callstack_to_file()
This makes it trivial to log the callstack to, e.g., stderr, which can
simplify debug cycles.
Diffstat (limited to 'src/nvim/log.c')
-rw-r--r-- | src/nvim/log.c | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/src/nvim/log.c b/src/nvim/log.c index b64aef3cac..3baf0b2ebd 100644 --- a/src/nvim/log.c +++ b/src/nvim/log.c @@ -178,7 +178,8 @@ FILE *open_log_file(void) } #ifdef HAVE_EXECINFO_BACKTRACE -void log_callstack(const char *const func_name, const int line_num) +void log_callstack_to_file(FILE *log_file, const char *const func_name, + const int line_num) { void *trace[100]; int trace_size = backtrace(trace, ARRAY_SIZE(trace)); @@ -190,8 +191,6 @@ void log_callstack(const char *const func_name, const int line_num) } assert(24 + exepathlen < IOSIZE); // Must fit in `cmdbuf` below. - do_log(DEBUG_LOG_LEVEL, func_name, line_num, true, "trace:"); - char cmdbuf[IOSIZE + (20 * ARRAY_SIZE(trace))]; snprintf(cmdbuf, sizeof(cmdbuf), "addr2line -e %s -f -p", exepath); for (int i = 1; i < trace_size; i++) { @@ -202,12 +201,8 @@ void log_callstack(const char *const func_name, const int line_num) // Now we have a command string like: // addr2line -e /path/to/exe -f -p 0x123 0x456 ... - log_lock(); - FILE *log_file = open_log_file(); - if (log_file == NULL) { - goto end; - } - + do_log_to_file(log_file, DEBUG_LOG_LEVEL, func_name, line_num, true, + "trace:"); FILE *fp = popen(cmdbuf, "r"); char linebuf[IOSIZE]; while (fgets(linebuf, sizeof(linebuf) - 1, fp) != NULL) { @@ -218,6 +213,18 @@ void log_callstack(const char *const func_name, const int line_num) if (log_file != stderr && log_file != stdout) { fclose(log_file); } +} + +void log_callstack(const char *const func_name, const int line_num) +{ + log_lock(); + FILE *log_file = open_log_file(); + if (log_file == NULL) { + goto end; + } + + log_callstack_to_file(log_file, func_name, line_num); + end: log_unlock(); } |