diff options
author | Pankaj Garg <pgarg@codeaurora.org> | 2014-12-22 14:59:18 -0800 |
---|---|---|
committer | WebTech Code Review <code-review@localhost> | 2015-01-05 16:22:58 -0800 |
commit | 5fb557e8ad3c648f0d5e2e93e7a0b8bd9b5903ab (patch) | |
tree | 39c732f0bc6f1e0340f331a97bcf69c6cffeaa2c /src/com/android/browser/CrashLogExceptionHandler.java | |
parent | b7fca88906976058135b00b2b84f22398d9d8d76 (diff) | |
download | android_packages_apps_Gello-5fb557e8ad3c648f0d5e2e93e7a0b8bd9b5903ab.tar.gz android_packages_apps_Gello-5fb557e8ad3c648f0d5e2e93e7a0b8bd9b5903ab.tar.bz2 android_packages_apps_Gello-5fb557e8ad3c648f0d5e2e93e7a0b8bd9b5903ab.zip |
Added more details to crash log report
Exception handler gets a nested throwable as an argument. The nested
throwable can have multiple entries if the application handled the
exception and re-threw it (as the same or a different exception).
With this fix, exception handler will include information for all the
entries in the crash report. Additionally, it'll include browser's
readable version and build date.
Change-Id: I3e90ef073fbc50efc5ea3f5e486c2f27c033256b
Diffstat (limited to 'src/com/android/browser/CrashLogExceptionHandler.java')
-rw-r--r-- | src/com/android/browser/CrashLogExceptionHandler.java | 60 |
1 files changed, 44 insertions, 16 deletions
diff --git a/src/com/android/browser/CrashLogExceptionHandler.java b/src/com/android/browser/CrashLogExceptionHandler.java index 49b4403a..bd182859 100644 --- a/src/com/android/browser/CrashLogExceptionHandler.java +++ b/src/com/android/browser/CrashLogExceptionHandler.java @@ -213,28 +213,43 @@ public class CrashLogExceptionHandler implements Thread.UncaughtExceptionHandler try { Calendar calendar = Calendar.getInstance(); - JSONObject jsonStackObj = new JSONObject(); + JSONObject jsonBackTraceObj = new JSONObject(); String date = calendar.getTime().toString(); String aboutSWE = mAppContext.getResources().getString(R.string.about_text); - String sweVer = aboutSWE.substring(aboutSWE.indexOf("Hash"), - aboutSWE.length()); - - jsonStackObj.put("date", date); - jsonStackObj.put("device", android.os.Build.MODEL); - jsonStackObj.put("android-ver", android.os.Build.VERSION.RELEASE); - jsonStackObj.put("browser-ver", sweVer); - jsonStackObj.put("thread", t.toString()); - jsonStackObj.put("cause", e.getCause()); - - Throwable cause = e.getCause(); - if(cause != null) { - StackTraceElement[] arr = cause.getStackTrace(); + String sweVer = findValueFromAboutText(aboutSWE, "Version:"); + String sweHash = findValueFromAboutText(aboutSWE, "Hash:"); + String sweBuildDate = findValueFromAboutText(aboutSWE, "Built:"); + + jsonBackTraceObj.put("date", date); + jsonBackTraceObj.put("device", android.os.Build.MODEL); + jsonBackTraceObj.put("android-ver", android.os.Build.VERSION.RELEASE); + jsonBackTraceObj.put("browser-ver", sweVer); + jsonBackTraceObj.put("browser-hash", sweHash); + jsonBackTraceObj.put("browser-build-date", sweBuildDate); + jsonBackTraceObj.put("thread", t.toString()); + + JSONArray jsonStackArray = new JSONArray(); + + Throwable throwable = e; + String stackTag = "Exception thrown while running"; + while (throwable != null) { + JSONObject jsonStackObj = new JSONObject(); + StackTraceElement[] arr = throwable.getStackTrace(); JSONArray jsonStack = new JSONArray(arr); - jsonStackObj.put("stack", jsonStack); + + jsonStackObj.put("cause", throwable.getCause()); + jsonStackObj.put("message", throwable.getMessage()); + jsonStackObj.put(stackTag, jsonStack); + + jsonStackArray.put(jsonStackObj); + + stackTag = "stack"; + throwable = throwable.getCause(); } + jsonBackTraceObj.put("exceptions", jsonStackArray); JSONObject jsonMainObj = new JSONObject(); - jsonMainObj.put("backtraces", jsonStackObj); + jsonMainObj.put("backtraces", jsonBackTraceObj); Log.e(LOGTAG, "Exception: " + jsonMainObj.toString(4)); crashLog = jsonMainObj.toString(); @@ -249,4 +264,17 @@ public class CrashLogExceptionHandler implements Thread.UncaughtExceptionHandler mDefaultHandler.uncaughtException(t, e); } + + private String findValueFromAboutText(String aboutText, String aboutKey) { + int start = aboutText.indexOf(aboutKey); + int end = aboutText.indexOf("\n", start); + String value = ""; + + if (start != -1 && end != -1) { + start += aboutKey.length(); + value = aboutText.substring(start, end); + } + return value; + } + } |