From f9b941f528e28f4afa7c6e09b9dff6f65d72f26c Mon Sep 17 00:00:00 2001 From: Makoto Onuki Date: Thu, 10 Mar 2016 17:19:08 -0800 Subject: [PATCH] Add a flag to log service side runtime exception Often during development I get runtime exceptions from system server but I only see client side stacktrace on logcat, which is pretty much inconvenient. Change-Id: I9c60fd92f6008d2c3a7eaf848b89ce3f1dffbe8a --- core/java/android/os/Binder.java | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/core/java/android/os/Binder.java b/core/java/android/os/Binder.java index d73deb6678eb3..ea8ba2f1e6dfe 100644 --- a/core/java/android/os/Binder.java +++ b/core/java/android/os/Binder.java @@ -70,6 +70,9 @@ public class Binder implements IBinder { private static final boolean CHECK_PARCEL_SIZE = false; static final String TAG = "Binder"; + /** @hide */ + public static boolean LOG_RUNTIME_EXCEPTION = false; // DO NOT SUBMIT WITH TRUE + /** * Control whether dump() calls are allowed. */ @@ -560,17 +563,16 @@ public class Binder implements IBinder { // If the call was FLAG_ONEWAY then these exceptions disappear into the ether. try { res = onTransact(code, data, reply, flags); - } catch (RemoteException e) { - if ((flags & FLAG_ONEWAY) != 0) { - Log.w(TAG, "Binder call failed.", e); - } else { - reply.setDataPosition(0); - reply.writeException(e); - } - res = true; - } catch (RuntimeException e) { - if ((flags & FLAG_ONEWAY) != 0) { + } catch (RemoteException|RuntimeException e) { + if (LOG_RUNTIME_EXCEPTION) { Log.w(TAG, "Caught a RuntimeException from the binder stub implementation.", e); + } + if ((flags & FLAG_ONEWAY) != 0) { + if (e instanceof RemoteException) { + Log.w(TAG, "Binder call failed.", e); + } else { + Log.w(TAG, "Caught a RuntimeException from the binder stub implementation.", e); + } } else { reply.setDataPosition(0); reply.writeException(e);