From 81e6c0b613dd5582ac5188b97dad4d5efb6cfe79 Mon Sep 17 00:00:00 2001 From: Josh Gao Date: Fri, 11 Aug 2017 15:01:29 -0700 Subject: [PATCH] debuggerd_handler: print pid and process name. Bug: http://b/64483618 Test: manual Change-Id: Ie772324895a8ffcd41d919a4a6113862a6468d12 --- debuggerd/handler/debuggerd_handler.cpp | 30 +++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/debuggerd/handler/debuggerd_handler.cpp b/debuggerd/handler/debuggerd_handler.cpp index 55cd03e38..127522926 100644 --- a/debuggerd/handler/debuggerd_handler.cpp +++ b/debuggerd/handler/debuggerd_handler.cpp @@ -116,6 +116,26 @@ static void __noreturn __printflike(1, 2) fatal_errno(const char* fmt, ...) { fatal("%s: %s", buf, strerror(err)); } +static bool get_main_thread_name(char* buf, size_t len) { + int fd = open("/proc/self/comm", O_RDONLY | O_CLOEXEC); + if (fd == -1) { + return false; + } + + ssize_t rc = read(fd, buf, len); + close(fd); + if (rc == -1) { + return false; + } else if (rc == 0) { + // Should never happen? + return false; + } + + // There's a trailing newline, replace it with a NUL. + buf[rc - 1] = '\0'; + return true; +} + /* * Writes a summary of the signal to the log file. We do this so that, if * for some reason we're not able to contact debuggerd, there is still some @@ -188,8 +208,14 @@ static void log_signal_summary(int signum, const siginfo_t* info) { } } - async_safe_format_log(ANDROID_LOG_FATAL, "libc", "Fatal signal %d (%s)%s%s in tid %d (%s)", - signum, signal_name, code_desc, addr_desc, __gettid(), thread_name); + char main_thread_name[MAX_TASK_NAME_LEN + 1]; + if (!get_main_thread_name(main_thread_name, sizeof(main_thread_name))) { + strncpy(main_thread_name, "", sizeof(main_thread_name)); + } + + async_safe_format_log( + ANDROID_LOG_FATAL, "libc", "Fatal signal %d (%s)%s%s in tid %d (%s), pid %d (%s)", signum, + signal_name, code_desc, addr_desc, __gettid(), thread_name, __getpid(), main_thread_name); } /*