Android開発でデバッグ作業をする際に設置するブレイクポイント。実行途中の変数の中身を確認したり、きちんと処理が走っているか確認するときに、だれでもブレイクポイントを使っていますよね。
Android Studioはデバッグも簡単にできるIDEで有名ですが、ブレイクポイントを設定しているのに、ブレイクポイントを設置した箇所で止まらない、そんなこともあるかと思います。
本記事では、デバッグ中にブレイクポイントを設置しているのにその箇所で止まらないときの原因と対策を紹介していきます。いくつかあるので、1つずつ確認してみてください。
debuggableをture
まずは、調べたらたくさん出てくる「build.gradle(app)」のbuildTypes>debugにてdebuggableをtureであることを確認してください。そもそも書いてないという人もいるかと思いますが、この際明記しておきましょう。
build.gradleandroid { buildTypes { customDebugType { debuggable true ... } } }
minifyEnabledをfalse
debuggableをtureにしていても、同時にminifyEnabledをfalseにしていなければだめなようです。こちらはデフォルトでは無効になっているようですが、minifyEnabledをfalseにしていた場合は、trueにしましょう。
build.gradleandroid { buildTypes { customDebugType { minifyEnabled false ... } } }
静的なプログラムとして完結している
プログラムの途中でブレイクポイントを設置していても、動的なイベント(クリックイベント)がなく、ただ描画して終わりのようなシンプルなプロジェクトの場合は、ブレイクポイントを設置していても止まりません。
例えば、下記のようなボタンクリックイベントを挿入して、onClick内にブレイクポイントを設置してみて試して下さい。
sample.javaButton button1 = (Button) findViewById(R.id.button_1); button1.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { // ブレイクポイントをこの辺に } });
別スレッドでブレイクポイントを置く
AsyncTaskやServiceを使って別スレッドで動かしていて、その中にブレイクポイントを設置しているとその箇所で止まらず無視しています。
じゃあ、確認するためにはどうすればいいかというと、確認したい箇所に下記プログラムを挿入します。
調べてみると、Widgetの開発をしていてもブレイクポイントにはとまらないようですね。
- AsyncTask
- Service
- ServiceIntent
- Widget
sample.java
android.os.Debug.waitForDebugger();
端末の接続が不安定なため
実機を使ってデバッグ作業をする際に、端末との接続が不安定な場合にブレイクポイントにとまらずadb接続が切れてしまうということがあります。
特に、WearOS(スマートウォッチ)で開発するとき、bluetoothによるadbデバッグをする際は、かなり接続が不安定になって、ブレイクポイントに到達する前によくadb接続が切れてしまいます。