diff options
author | Kenny Root <kenny@the-b.org> | 2009-06-10 08:27:58 +0000 |
---|---|---|
committer | Kenny Root <kenny@the-b.org> | 2009-06-10 08:27:58 +0000 |
commit | d62e6eebae78c8d59c46517fd5cea9be6942f5ba (patch) | |
tree | 620ce7a5e365d71097bb839fcfa2f81890a6a234 /src/com/nullwire/trace/DefaultExceptionHandler.java | |
parent | e7e79db923cd98bfd804ae2dc8383d949b5ddddb (diff) | |
download | connectbot-d62e6eebae78c8d59c46517fd5cea9be6942f5ba.tar.gz connectbot-d62e6eebae78c8d59c46517fd5cea9be6942f5ba.tar.bz2 connectbot-d62e6eebae78c8d59c46517fd5cea9be6942f5ba.zip |
Add stack trace reporting
* When an unhandled exception occurs, the exception handler writes it to a file in addition to all ther other stuff that normally happens
* The next time ConnectBot is started up, the user is prompted as to whether they want to submit the stack trace to aid in finding bugs.
* If the user agrees or declines, the stack traces are deleted.
git-svn-id: https://connectbot.googlecode.com/svn/trunk/connectbot@277 df292f66-193f-0410-a5fc-6d59da041ff2
Diffstat (limited to 'src/com/nullwire/trace/DefaultExceptionHandler.java')
-rw-r--r-- | src/com/nullwire/trace/DefaultExceptionHandler.java | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/src/com/nullwire/trace/DefaultExceptionHandler.java b/src/com/nullwire/trace/DefaultExceptionHandler.java new file mode 100644 index 0000000..e475888 --- /dev/null +++ b/src/com/nullwire/trace/DefaultExceptionHandler.java @@ -0,0 +1,46 @@ +package com.nullwire.trace; + +import java.io.BufferedWriter; +import java.io.FileWriter; +import java.io.PrintWriter; +import java.io.StringWriter; +import java.io.Writer; +import java.lang.Thread.UncaughtExceptionHandler; +import java.util.Random; + +import android.util.Log; + +public class DefaultExceptionHandler implements UncaughtExceptionHandler { + + private static final String TAG = "UNHANDLED_EXCEPTION"; + + // Default exception handler + public void uncaughtException(Thread t, Throwable e) { + // Here you should have a more robust, permanent record of problems + final Writer result = new StringWriter(); + final PrintWriter printWriter = new PrintWriter(result); + e.printStackTrace(printWriter); + try { + // Random number to avoid duplicate files + Random generator = new Random(); + int random = generator.nextInt(99999); + // Embed version in stacktrace filename + String filename = G.APP_VERSION + "-" + Integer.toString(random); + Log.d(TAG, "Writing unhandled exception to: " + G.FILES_PATH + "/" + + filename + ".stacktrace"); + // Write the stacktrace to disk + BufferedWriter bos = new BufferedWriter(new FileWriter(G.FILES_PATH + + "/" + filename + ".stacktrace")); + bos.write(result.toString()); + bos.flush(); + // Close up everything + bos.close(); + } catch (Exception ebos) { + // Nothing much we can do about this - the game is over + ebos.printStackTrace(); + } + Log.d(TAG, result.toString()); + // FlurryAgent session has ended + t.getThreadGroup().destroy(); + } +} |