簡體   English   中英

如何強制Android應用程序打印未捕獲的異常的堆棧跟蹤?

[英]How to force android application to print stack trace of uncaught exception?

當我的應用崩潰時,它會在Logcat中拋出一些行:

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是我嘗試獲取堆棧跟蹤形式異常,但是它不起作用。

當我隨處嘗試捕獲時,我會捕獲那些異常。 但這並不總是一種選擇,並且需要大量時間。

您可以看到所有日志方法的替代。 這是帶有(String標記,String msg,Throwable tr)簽名的鏈接。

將異常作為第三個參數傳遞給您應該在logcat中具有完整的stacktrace。

三參數日志方法使用getStackTraceString()方法

我這樣做:

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

希望會有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM