2

デバイスが Eclipse デバッガーに接続されていないときにアプリのクラッシュをデバッグするにはどうすればよいですか? クラッシュには 2 つのカテゴリがあります。1 つは、特定のアクションが実行され、アプリがすぐにクラッシュした場合です。これらは、デバイスをコンピューターに接続して同じ操作を実行できるため、簡単に再現できます。クラッシュには別のカテゴリがあります。通常、アプリがアイドル状態/バックグラウンド/デバイス画面オフなどのときに発生し、アプリを再起動してフォアグラウンドにするとクラッシュします。このカテゴリのクラッシュでは、クラッシュが発生した場所がわかりません。これらのタイプのクラッシュをデバッグする方法について何か提案はありますか?

ありがとうございました。

4

2 に答える 2

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));

次に、例外を確認することで、エラーまたは例外が発生した場所を特定できます。

于 2014-03-25T06:58:13.350 に答える
1

このような目的でBugsenseまたはを使用しますcrashlytics

于 2014-03-25T06:51:11.190 に答える