[PATCH] [libcxxabi] Improve logging of aborts for Android.

Dan Albert danalbert at google.com
Mon Aug 18 17:43:51 PDT 2014


Hi jroelofs,

In Android, stderr only goes to the console, and as such will only ever be seen by adb shell users. Since very few developers will ever actually see that, also send the abort message to logcat and the tombstone.

http://reviews.llvm.org/D4964

Files:
  src/abort_message.cpp

Index: src/abort_message.cpp
===================================================================
--- src/abort_message.cpp
+++ src/abort_message.cpp
@@ -12,9 +12,14 @@
 #include <stdarg.h>
 #include "abort_message.h"
 
+#ifdef __BIONIC__
+#include <android/set_abort_message.h>
+#include <syslog.h>
+#endif
+
 #pragma GCC visibility push(hidden)
 
-#if __APPLE__ 
+#if __APPLE__
 #   if defined(__has_include) && __has_include(<CrashReporterClient.h>)
 #       define HAVE_CRASHREPORTERCLIENT_H 1
 #       include <CrashReporterClient.h>
@@ -33,15 +38,29 @@
     vfprintf(stderr, format, list);
     va_end(list);
     fprintf(stderr, "\n");
-    
+
 #if __APPLE__ && HAVE_CRASHREPORTERCLIENT_H
     // record message in crash report
     char* buffer;
     va_list list2;
     va_start(list2, format);
     vasprintf(&buffer, format, list2);
     va_end(list2);
     CRSetCrashLogMessage(buffer);
+#elif __BIONIC__
+    char* buffer;
+    va_list list2;
+    va_start(list2, format);
+    vasprintf(&buffer, format, list2);
+    va_end(list2);
+
+    // Show error in tombstone.
+    android_set_abort_message(buffer);
+
+    // Show error in logcat.
+    openlog("libc++abi", 0, 0);
+    syslog(LOG_CRIT, "%s", buffer);
+    closelog();
 #endif
 
     abort();
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D4964.12635.patch
Type: text/x-patch
Size: 1263 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140819/8452f87c/attachment.bin>


More information about the cfe-commits mailing list