分離されたプロセスをデバッグする

前エントリで言及したようにAndroidアプリケーションはその内部に「別プロセスで実行する = android:process」を明示した場合はプロセスを分離することができるが、Eclipseで分離したプロセスをデバッグするにはどうすればよいのだろう。

通常Eclipse ADTのデバッグセッションはAndroidマニフェストに従って生成されたアプリケーションのプロセスにアタッチした状態で開始されるが、この状態でデバッグできるコードは元々のアプリケーション-プロセスに属したコードだけであり、分離したプロセスで実行されている部分はデバッグセッションでは見えないのでデバッグできない。(当然である)

では一度分離されてしまったプロセスはデバッグできないのだろうか? 否。

デバッグセッションを開始後、DDMSパースペクティブのDeviceビューを見ると実行されているプロセスの一覧が表示されておりデバッグ中のプロセスに緑色の「バグ・アイコン」が表示されているのが分るだろう。

バグ・アイコンが表示されている(デバッグ対象のプロセス)の下にあるプロセスがサービスプロセスだが、この状態で行を選択してツールバー上のバグアイコンが描画されているボタンを押下することで、同様にサービスプロセスのデバッグセッションを開始することができる。

ここでデバッグパースペクティブに戻ると、もう一つのデバッグセッションが開始していることが分るだろう。

なお、プロセス分離であってもプレフィクス":"つまりプライベートプロセスとして分離した場合は上記の方法でデバッグが開始せず、以下のようなエラーダイアログが表示されるだろう。

この場合、DDMSパースペクティブのDeviceビュー上に表示されている、デバッグ対象プロセスのポート番号を覚えておき

(8632)、Eclipseのメニュー「デバッグ構成」から「リモートJavaアプリケーション」に構成を新たに作成して、このポートを指定することで、同様にデバッグセッションを開始できる。

なお、一度デバッグ無しでアプリケーションを起動しておいて、後からデバッガをアタッチする方法は起動に時間がかからないため、初期化部分(Activityがshowされるまで)をデバッグする必要が無い場合は時間の節約になるので分離されたプロセスのデバッグ以外でもお勧めの方法だ。