From e5bb08cc185a28d3e96bfddc7e9a0d837f89b2b8 Mon Sep 17 00:00:00 2001 From: Drew DeVault Date: Thu, 28 Jan 2016 07:56:46 -0500 Subject: Print /proc//maps on segfault --- common/log.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'common/log.c') diff --git a/common/log.c b/common/log.c index f9242bf4..0c0ecf89 100644 --- a/common/log.c +++ b/common/log.c @@ -1,5 +1,6 @@ #include "log.h" #include "sway.h" +#include "readline.h" #include #include #include @@ -142,6 +143,9 @@ void error_handler(int sig) { void *array[max_lines]; char **bt; size_t bt_len; + char maps_file[256]; + char maps_buffer[1024]; + FILE *maps; sway_log(L_ERROR, "Error: Signal %d. Printing backtrace", sig); bt_len = backtrace(array, max_lines); @@ -155,6 +159,22 @@ void error_handler(int sig) { for (i = 0; (size_t)i < bt_len; i++) { sway_log(L_ERROR, "Backtrace: %s", bt[i]); } + + sway_log(L_ERROR, "Maps:"); + pid_t pid = getpid(); + if (snprintf(maps_file, 255, "/proc/%zd/maps", (size_t)pid) < 255) { + maps = fopen(maps_file, "r"); + while (!feof(maps)) { + char *m = read_line_buffer(maps, maps_buffer, 1024); + if (!m) { + fclose(maps); + sway_log(L_ERROR, "Unable to allocate memory to show maps"); + break; + } + sway_log(L_ERROR, m); + } + fclose(maps); + } #else sway_log(L_ERROR, "Error: Signal %d.", sig); #endif -- cgit v1.2.3-54-g00ecf