Loading debuggerd/crasher.c +28 −21 Original line number Diff line number Diff line //#include <cutils/misc.h> #include <unistd.h> #include <assert.h> #include <errno.h> #include <pthread.h> #include <sched.h> #include <signal.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sched.h> #include <errno.h> #include <signal.h> #include <sys/ptrace.h> #include <sys/wait.h> #include <sys/socket.h> #include <sys/wait.h> #include <unistd.h> #include <pthread.h> #include <cutils/log.h> #include <cutils/sockets.h> extern const char* __progname; Loading @@ -23,7 +20,7 @@ void crash1(void); void crashnostack(void); static int do_action(const char* arg); static void maybeabort() { static void maybe_abort() { if (time(0) != 42) { abort(); } Loading Loading @@ -132,7 +129,15 @@ static int do_action(const char* arg) } else if (!strcmp(arg, "crash")) { return crash(42); } else if (!strcmp(arg, "abort")) { maybeabort(); maybe_abort(); } else if (!strcmp(arg, "assert")) { __assert("some_file.c", 123, "false"); } else if (!strcmp(arg, "assert2")) { __assert2("some_file.c", 123, "some_function", "false"); } else if (!strcmp(arg, "LOG_ALWAYS_FATAL")) { LOG_ALWAYS_FATAL("hello %s", "world"); } else if (!strcmp(arg, "LOG_ALWAYS_FATAL_IF")) { LOG_ALWAYS_FATAL_IF(true, "hello %s", "world"); } else if (!strcmp(arg, "heap-usage")) { abuse_heap(); } Loading @@ -148,6 +153,8 @@ static int do_action(const char* arg) fprintf(stderr, " exit call exit(1)\n"); fprintf(stderr, " crash cause a SIGSEGV\n"); fprintf(stderr, " abort call abort()\n"); fprintf(stderr, " assert call assert() without a function\n"); fprintf(stderr, " assert2 call assert() with a function\n"); fprintf(stderr, "prefix any of the above with 'thread-' to not run\n"); fprintf(stderr, "on the process' main thread.\n"); return EXIT_SUCCESS; Loading include/android/log.h +3 −3 Original line number Diff line number Diff line Loading @@ -110,8 +110,8 @@ int __android_log_vprint(int prio, const char *tag, const char *fmt, va_list ap); /* * Log an assertion failure and SIGTRAP the process to have a chance * to inspect it, if a debugger is attached. This uses the FATAL priority. * Log an assertion failure and abort the process to have a chance * to inspect it if a debugger is attached. This uses the FATAL priority. */ void __android_log_assert(const char *cond, const char *tag, const char *fmt, ...) Loading liblog/logd_write.c +7 −1 Original line number Diff line number Diff line Loading @@ -407,9 +407,15 @@ void __android_log_assert(const char *cond, const char *tag, strcpy(buf, "Unspecified assertion failed"); } #if __BIONIC__ // Ensure debuggerd gets to see what went wrong by keeping the C library in the loop. extern __noreturn void __android_fatal(const char* tag, const char* format, ...) __printflike(2, 3); __android_fatal(tag ? tag : "", "%s", buf); #else __android_log_write(ANDROID_LOG_FATAL, tag, buf); __builtin_trap(); /* trap so we have a chance to debug the situation */ #endif /* NOTREACHED */ } int __android_log_bwrite(int32_t tag, const void *payload, size_t len) Loading liblog/logd_write_kern.c +7 −1 Original line number Diff line number Diff line Loading @@ -272,9 +272,15 @@ void __android_log_assert(const char *cond, const char *tag, strcpy(buf, "Unspecified assertion failed"); } #if __BIONIC__ // Ensure debuggerd gets to see what went wrong by keeping the C library in the loop. extern __noreturn void __android_fatal(const char* tag, const char* format, ...) __printflike(2, 3); __android_fatal(tag ? tag : "", "%s", buf); #else __android_log_write(ANDROID_LOG_FATAL, tag, buf); __builtin_trap(); /* trap so we have a chance to debug the situation */ #endif /* NOTREACHED */ } int __android_log_bwrite(int32_t tag, const void *payload, size_t len) Loading Loading
debuggerd/crasher.c +28 −21 Original line number Diff line number Diff line //#include <cutils/misc.h> #include <unistd.h> #include <assert.h> #include <errno.h> #include <pthread.h> #include <sched.h> #include <signal.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sched.h> #include <errno.h> #include <signal.h> #include <sys/ptrace.h> #include <sys/wait.h> #include <sys/socket.h> #include <sys/wait.h> #include <unistd.h> #include <pthread.h> #include <cutils/log.h> #include <cutils/sockets.h> extern const char* __progname; Loading @@ -23,7 +20,7 @@ void crash1(void); void crashnostack(void); static int do_action(const char* arg); static void maybeabort() { static void maybe_abort() { if (time(0) != 42) { abort(); } Loading Loading @@ -132,7 +129,15 @@ static int do_action(const char* arg) } else if (!strcmp(arg, "crash")) { return crash(42); } else if (!strcmp(arg, "abort")) { maybeabort(); maybe_abort(); } else if (!strcmp(arg, "assert")) { __assert("some_file.c", 123, "false"); } else if (!strcmp(arg, "assert2")) { __assert2("some_file.c", 123, "some_function", "false"); } else if (!strcmp(arg, "LOG_ALWAYS_FATAL")) { LOG_ALWAYS_FATAL("hello %s", "world"); } else if (!strcmp(arg, "LOG_ALWAYS_FATAL_IF")) { LOG_ALWAYS_FATAL_IF(true, "hello %s", "world"); } else if (!strcmp(arg, "heap-usage")) { abuse_heap(); } Loading @@ -148,6 +153,8 @@ static int do_action(const char* arg) fprintf(stderr, " exit call exit(1)\n"); fprintf(stderr, " crash cause a SIGSEGV\n"); fprintf(stderr, " abort call abort()\n"); fprintf(stderr, " assert call assert() without a function\n"); fprintf(stderr, " assert2 call assert() with a function\n"); fprintf(stderr, "prefix any of the above with 'thread-' to not run\n"); fprintf(stderr, "on the process' main thread.\n"); return EXIT_SUCCESS; Loading
include/android/log.h +3 −3 Original line number Diff line number Diff line Loading @@ -110,8 +110,8 @@ int __android_log_vprint(int prio, const char *tag, const char *fmt, va_list ap); /* * Log an assertion failure and SIGTRAP the process to have a chance * to inspect it, if a debugger is attached. This uses the FATAL priority. * Log an assertion failure and abort the process to have a chance * to inspect it if a debugger is attached. This uses the FATAL priority. */ void __android_log_assert(const char *cond, const char *tag, const char *fmt, ...) Loading
liblog/logd_write.c +7 −1 Original line number Diff line number Diff line Loading @@ -407,9 +407,15 @@ void __android_log_assert(const char *cond, const char *tag, strcpy(buf, "Unspecified assertion failed"); } #if __BIONIC__ // Ensure debuggerd gets to see what went wrong by keeping the C library in the loop. extern __noreturn void __android_fatal(const char* tag, const char* format, ...) __printflike(2, 3); __android_fatal(tag ? tag : "", "%s", buf); #else __android_log_write(ANDROID_LOG_FATAL, tag, buf); __builtin_trap(); /* trap so we have a chance to debug the situation */ #endif /* NOTREACHED */ } int __android_log_bwrite(int32_t tag, const void *payload, size_t len) Loading
liblog/logd_write_kern.c +7 −1 Original line number Diff line number Diff line Loading @@ -272,9 +272,15 @@ void __android_log_assert(const char *cond, const char *tag, strcpy(buf, "Unspecified assertion failed"); } #if __BIONIC__ // Ensure debuggerd gets to see what went wrong by keeping the C library in the loop. extern __noreturn void __android_fatal(const char* tag, const char* format, ...) __printflike(2, 3); __android_fatal(tag ? tag : "", "%s", buf); #else __android_log_write(ANDROID_LOG_FATAL, tag, buf); __builtin_trap(); /* trap so we have a chance to debug the situation */ #endif /* NOTREACHED */ } int __android_log_bwrite(int32_t tag, const void *payload, size_t len) Loading