2014-03-25 73 views
2

如何在設備未連接到eclipse調試器時調試應用程序崩潰?有兩種崩潰類型,一種是在執行特定操作時,應用程序立即崩潰,這很容易重現,因爲我可以將設備連接到計算機並執行相同的操作。還有另一類崩潰,通常發生在應用程序閒置時/在後臺/設備屏幕關閉/等等...以及應用程序重新啓動並進入前臺時,它會崩潰。有了這種類型的崩潰,我不知道崩潰發生在哪裏,關於如何調試這些類型的崩潰的任何建議?如何在未連接到調試器時調試android崩潰

謝謝。

回答

2

可以使用UncaughtExceptionHandler的接口這一點。通過看你能確定在錯誤或異常發生異常

public class ExceptionHandler implements UncaughtExceptionHandler{ 

Utils utils ; 
Context context; 
private final String LINE_SEPARATOR = "\n"; 

public ExceptionHandler(Context con) { 
    // TODO Auto-generated constructor stub 
    context = con; 
} 

@Override 
public void uncaughtException(Thread arg0, Throwable arg1) { 
    // TODO Auto-generated method stub 

    StringWriter stackTrace = new StringWriter(); 
    arg1.printStackTrace(new PrintWriter(stackTrace)); 
    StringBuilder errorReport = new StringBuilder(); 
    errorReport.append("************ CAUSE OF ERROR ************\n\n"); 
    errorReport.append(stackTrace.toString()); 

    errorReport.append("\n************ DEVICE INFORMATION ***********\n"); 
    errorReport.append("Brand: "); 
    errorReport.append(Build.BRAND); 
    errorReport.append(LINE_SEPARATOR); 
    errorReport.append("Device: "); 
    errorReport.append(Build.DEVICE); 
    errorReport.append(LINE_SEPARATOR); 
    errorReport.append("Model: "); 
    errorReport.append(Build.MODEL); 
    errorReport.append(LINE_SEPARATOR); 
    errorReport.append("Id: "); 
    errorReport.append(Build.ID); 
    errorReport.append(LINE_SEPARATOR); 
    errorReport.append("Product: "); 
    errorReport.append(Build.PRODUCT); 
    errorReport.append(LINE_SEPARATOR); 
    errorReport.append("\n************ FIRMWARE ************\n"); 
    errorReport.append("SDK: "); 
    errorReport.append(Build.VERSION.SDK); 
    errorReport.append(LINE_SEPARATOR); 
    errorReport.append("Release: "); 
    errorReport.append(Build.VERSION.RELEASE); 
    errorReport.append(LINE_SEPARATOR); 
    errorReport.append("Incremental: "); 
    errorReport.append(Build.VERSION.INCREMENTAL); 
    errorReport.append(LINE_SEPARATOR); 


    Intent i = new Intent(context,ExceptionActivity.class); 
    i.putExtra("exception",errorReport.toString()); 
    context.startActivity(i); 


    android.os.Process.killProcess(android.os.Process.myPid()); 
    System.exit(10); 





} 

}

,然後在每一個活動,之後setContentView

Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler(this)); 

然後:只需像這樣創建的類。

+0

這太好了,正是我在找的東西。只需要澄清一下,ExceptionActivity會直接顯示errorReport,是否正確? –

+0

是的。與logcat顯示的相同。 –

+0

我無法從ExceptionHandler啓動Activity,只是在設備上出現黑屏。那麼,我需要在另一個線程上啓動它,因爲當前的那個只是拋出了一個異常?如果是這樣,你有什麼指示如何做到這一點?謝謝。 –

1

使用Bugsensecrashlytics這些樣的目的