2015-07-10 59 views
0

當我的應用程序崩潰,在拋出一些logcat中線路:如何強制android應用程序打印未捕獲異常的堆棧跟蹤?

07-10 10:35:34.671 32391-32391/com.noframe.farmisagronom D/AndroidRuntime﹕ Shutting down VM 
07-10 10:35:34.671 32391-32391/com.noframe.farmisagronom W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x415bf8b0) 

如何強制應用程序打印異常堆棧跟蹤?

我的應用程序類代碼:

public class Application extends MultiDexApplication { 

    @Override 
    protected void attachBaseContext(Context base) { 
     try { 
      super.attachBaseContext(base); 
      MultiDex.install(this); 
     }catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    public void onCreate() { 

     try { 
      Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() { 

       @Override 
       public void uncaughtException(Thread t, Throwable e) { 
        Log.e("Uncaught Exception detected in thread {}", t.getName(), e); 
       } 
      }); 
     } catch (SecurityException e) { 
      Log.e("Could not set the Default Uncaught Exception Handler", "" ,e); 
     } 
     super.onCreate(); 
    } 
} 

注意setDefaultUncaughtExceptionHandler是我試圖讓堆棧跟蹤形式的異常,但沒有作用。

當我瘋狂地嘗試抓住每一個地方,我發現這些例外。但這並不總是一種選擇,並且需要大量時間。

回答

0

您可以看到使用(String tag,String msg,Throwable tr)簽名的所有日誌方法Here's the link的重寫。

傳遞異常作爲第三個參數應該給你logcat中的完整堆棧跟蹤。

這三個參數的日誌方法使用getStackTraceString()方法

+0

你也可以看[這裏](http://developer.android.com/reference/android/util/Log.html#getStackTraceString%28java.lang.Throwable%29),在這裏你也可以看到解決方案[需要處理未捕獲的異常併發送日誌文件](http://stackoverflow.com/questions/19897628/need-to-handle-uncaught-exception-and-send-log-file) – Shekhar

+0

public static String getStackTraceString(Throwable tr)我假設?而且我得到了巫術魔法的Throwable或一些特殊的未捕獲異常舞蹈? – Alpha

0

我沒有這樣說:

StackTraceElement[] st = new StackTraceElement[12]; 
st = ex.getStackTrace(); 
for (StackTraceElement el: st) 
    com.example.android.common.logger.Log.e(TAG, " " + el); 

希望這將有助於。