如何在設備未連接到eclipse調試器時調試應用程序崩潰?有兩種崩潰類型,一種是在執行特定操作時,應用程序立即崩潰,這很容易重現,因爲我可以將設備連接到計算機並執行相同的操作。還有另一類崩潰,通常發生在應用程序閒置時/在後臺/設備屏幕關閉/等等...以及應用程序重新啓動並進入前臺時,它會崩潰。有了這種類型的崩潰,我不知道崩潰發生在哪裏,關於如何調試這些類型的崩潰的任何建議?如何在未連接到調試器時調試android崩潰
謝謝。
如何在設備未連接到eclipse調試器時調試應用程序崩潰?有兩種崩潰類型,一種是在執行特定操作時,應用程序立即崩潰,這很容易重現,因爲我可以將設備連接到計算機並執行相同的操作。還有另一類崩潰,通常發生在應用程序閒置時/在後臺/設備屏幕關閉/等等...以及應用程序重新啓動並進入前臺時,它會崩潰。有了這種類型的崩潰,我不知道崩潰發生在哪裏,關於如何調試這些類型的崩潰的任何建議?如何在未連接到調試器時調試android崩潰
謝謝。
可以使用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));
然後:只需像這樣創建的類。
使用Bugsense
或crashlytics
這些樣的目的
這太好了,正是我在找的東西。只需要澄清一下,ExceptionActivity會直接顯示errorReport,是否正確? –
是的。與logcat顯示的相同。 –
我無法從ExceptionHandler啓動Activity,只是在設備上出現黑屏。那麼,我需要在另一個線程上啓動它,因爲當前的那個只是拋出了一個異常?如果是這樣,你有什麼指示如何做到這一點?謝謝。 –