如何在未连接到调试器时调试android崩溃

时间:2014-03-25 06:48:55

标签: android android-debug

当设备未连接到eclipse调试器时,如何调试应用程序崩溃?有两种类型的崩溃,一种是在执行特定操作并且应用程序立即崩溃时,这些很容易重现,因为我可以将设备连接到计算机并执行相同的操作。还有另一类崩溃,通常发生在应用程序处于空闲状态/后台/设备屏幕关闭/等等时...当应用程序重新启动并进入前台时,它会崩溃。有了这类崩溃,我不知道崩溃发生在哪里,有关如何调试这些类型的崩溃的任何建议吗?

谢谢。

2 个答案:

答案 0 :(得分: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));

然后通过查看异常,您可以确定发生错误或异常的位置。

答案 1 :(得分:1)

Bugsensecrashlytics用于此类目的