当设备未连接到 eclipse 调试器时,如何调试应用程序崩溃?有 2 类崩溃,一种是执行特定操作并且应用程序立即崩溃,这些很容易重现,因为我可以将设备连接到计算机并执行相同的操作。还有另一种类型的崩溃,通常发生在应用程序空闲/在后台/设备屏幕关闭/等时......当应用程序重新启动并进入前台时,它会崩溃。对于此类崩溃,我不知道崩溃发生在哪里,关于如何调试这些类型的崩溃有什么建议吗?
谢谢你。
当设备未连接到 eclipse 调试器时,如何调试应用程序崩溃?有 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));
然后通过查看异常,您可以确定发生错误或异常的位置。
使用Bugsense
或crashlytics
用于这些目的