[libcxxabi] r215983 - Improve logging of aborts for Android.

Dan Albert danalbert at google.com
Tue Aug 19 09:30:08 PDT 2014


Author: danalbert
Date: Tue Aug 19 11:30:07 2014
New Revision: 215983

URL: http://llvm.org/viewvc/llvm-project?rev=215983&view=rev
Log:
Improve logging of aborts for Android.

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.

Modified:
    libcxxabi/trunk/src/abort_message.cpp

Modified: libcxxabi/trunk/src/abort_message.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxxabi/trunk/src/abort_message.cpp?rev=215983&r1=215982&r2=215983&view=diff
==============================================================================
--- libcxxabi/trunk/src/abort_message.cpp (original)
+++ libcxxabi/trunk/src/abort_message.cpp Tue Aug 19 11:30:07 2014
@@ -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,7 +38,7 @@ void abort_message(const char* format, .
     vfprintf(stderr, format, list);
     va_end(list);
     fprintf(stderr, "\n");
-    
+
 #if __APPLE__ && HAVE_CRASHREPORTERCLIENT_H
     // record message in crash report
     char* buffer;
@@ -42,6 +47,20 @@ void abort_message(const char* 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();





More information about the cfe-commits mailing list