47

を使用してクラッシュレポートをテストしたいのですacraが、最初のステップは、コードを使用してAndroidで致命的なクラッシュをシミュレートする必要があることです。

何か案が?

4

14 に答える 14

102
Just execute this code: divide by zero

更新:これを試すこともできますメソッドを作成し、

public void stackOverflow() {
        this.stackOverflow();

    }

そしてこれをどこか/buttonClickと呼んでください

または、キャッチされなかった例外をスローするだけです

throw new RuntimeException("This is a crash");

ビンゴ!

于 2012-08-04T09:11:25.447 に答える
29
  1. 定義されていないビューにアクセスします。
  2. チェックせずに空のリストの最初の要素にアクセスします。
  3. ゼロ除算。
  4. デバイスを窓の外に投げます。
  5. デバイスを水に沈めます。
于 2012-08-04T09:15:50.993 に答える
13

Androidマニフェストでアクティビティを宣言しないでください。

于 2012-08-04T09:12:26.257 に答える
10

NullPointer例外を試すことができます。

Integer i = null;

次に、オブジェクトの任意のメソッドを呼び出します。

i.byteValue();

初期化されていないオブジェクトでメソッドを呼び出すと、アプリがクラッシュします。

于 2012-08-04T09:16:49.527 に答える
6

非常に単純なアプローチ...そしてそれが起こった理由を理解することは非常に重要です。

メソッドの前に変数を開始してから、それを使用してメソッドまたは変数を呼び出すか、リスナーに登録してみてください。onCreate()setContentView()

例えば:

Button b;

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        b = (Button)findViewById(R.id.butt);
        b.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {


        }
    });
        setContentView(R.layout.main);


    }

main.xmlレイアウトのcomponents/viewのいずれもIDを取得する前に 、これはクラッシュしました。setContentView()

于 2012-08-04T09:22:34.607 に答える
6

main.xmlに次のようなボタンを作成するだけです。

 <Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="crash"
    android:text="Crash me" />

次に、アプリを実行し、クリックしてクラッシュします

于 2015-01-23T16:04:14.673 に答える
2

私が知っている最も単純なもの:nullをスローします。

nullをスローできないため、NullPointerExceptionが発生します。

throw null;
于 2014-04-24T15:55:26.390 に答える
1

単純なヌルポイント例外でクラッシュする可能性があります。

 throw new NullPointerException();
于 2019-03-25T11:15:11.513 に答える
1

@ vinnet-shuklaの回答に加えて:

「または単にキャッチされない例外をスローする」

キャッチされなかった例外をスローしてクラッシュを実行することは、スタックのどこかで例外がキャッチされる可能性があるため、悪い考えです。特に、現在どこにいるかわからない場合はそうです:)

よりエレガントな方法は、ERRORを使用することです

エラーはThrowableのサブクラスであり、妥当なアプリケーションがキャッチしようとしてはならない重大な問題を示します。そのようなエラーのほとんどは異常な状態です。ThreadDeathエラーは、「通常の」状態ですが、ほとんどのアプリケーションがそれをキャッチしようとすべきではないため、Errorのサブクラスでもあります。

したがって、独自のErrorサブクラスを作成して使用できます。

/*
 * usage:
 * 
 *   CrashError.doCrash(); 
 *
 */
public class CrashError extends Error {

    public CrashError() { 
        this("simulated crash");
    }

    public CrashError(String msg) {
        super(msg);
    }

    public static void doCrash() {
        throw new CrashError();
    }

}

しかし、他の可能性について話す場合は、例外をスローすることもできます:)

これは、特にクラスがVM実装で利用できない場合に、sun.misc.Unsafeを使用する以外の方法でチェックされた例外を再スローする方法のレッスンにもなります:)

@SuppressWarnings("unchecked")
public static <E extends Throwable> void throwAnyT(Throwable e) throws E {
    throw (E) e;
}

public static void throwUnchecked(Throwable e) {
    throwAny(e);
    // should never get there.
    throw new InternalError();
}

public static void crash() {
    throwUnchecked(new java.io.IOException("simulated crash"));
}

@audric回答に加えて:

「ヌルを投げることはできません」

はい、できます:)これはまさにあなたの例で行っていることであり、catchブロックがThrowableを使用しない場合、検出されなくなる可能性があります-NPXはスローされず、コードが実行されるときに通常のフローが発生します。 ANDROID DALVIKでこれを見て、自分で体験したことでしょう:)

そして何について..?多分それはあなたのニーズを満たすことができますか?

Java固有(Androidでも):

- Runtime.getRuntime().exit(int);
- System.exit(int);
- Runtime.getRuntime().halt(int);

アンドロイド固有:

- android.os.Process.killProcess(int);
- android.os.Process.killProcessQuiet(int);
- android.os.Process.sendSignal(int,int);
- android.system.Os.kill(int);
于 2019-05-19T10:38:43.163 に答える
0

このような遅延の後、強制的にクラッシュします。

new android.os.Handler().postDelayed(
              new Runnable() {
                  public void run() {
                      Log.i("tag", "This'll run 10 seconds later");
                      throw new RuntimeException("This is a crash");
                  }
              },
              10000);

Ref-1Ref-2

于 2020-10-22T13:39:01.423 に答える
0

Firebase Crashlyticsを使用している場合は、これを行う非常に簡単な方法があります。彼らの文書にも言及されています。

val crashlytics = FirebaseCrashlytics.getInstance()
crashlytics.log("my message")
于 2020-11-10T10:48:29.550 に答える
0

kotlinの場合:

val test = ("0")
println(test[1])
于 2021-01-10T08:47:19.260 に答える
0

このコード行だけでアプリケーションをクラッシュさせることができます。

throw new RuntimeException("Test Crash"); // Force a crash

メッセージ(この場合は「TestCrash」)を渡すことができます。これは後で参照するのに役立ちます。

一歩先に、 アプリケーションのクラスファイルのいずれにも以下のようなUncaughtExceptionHandlerインターフェイスが実装されていないことを確認してください。

public class MyApplication extends Application implements Thread.UncaughtExceptionHandler{

そうしないと、上記の例外またはその問題に関する例外がそのクラスによってキャッチ/消費され、アプリがクラッシュしなくなります。ただし、以下のようにuncaughtException(Thread t、Throwable e)メソッドでその例外を取得し、必要なアクションを実行できます。あなたの場合、サポートされているSDKメソッドを使用してAcraに報告します。

@Override
public void uncaughtException(Thread t, Throwable e) {
    Log.e("MyApplication", "Error", e);
}
于 2021-05-05T11:17:20.080 に答える
-3

次のコードを使用します。

String xyz=null;
system.out.println(xyz);
于 2015-01-06T11:44:12.423 に答える