ようやく、ようやく、ADTr20になってC/C++のコードがデバッガを使ってデバッグができるようになった(これ以下、NDKデバッグ機能と呼ぶ)
これまでもgdb(GNU Debugger)を使ったデバッグができていたけど使い勝手的に難易度高い訳で。ようやくEcliseをつかってデバッグができるようになったのはかなりうれしい。
ということで、設定からデバッグまでの手順をメモしておく。
インストール
最初にADTr20を新規にインストールする。これはNDKデバッグ機能に必要なプラグイン(NDK plugins)は、ADTr18からのアップグレードではインストールされないから。ADTr18を削除して、ADTr20を新規にインストールした方が早い。
NDKデバッグ機能は、CDT(EclipseのC/C++開発環境向けプラグイン)の機能に依存しており動作はCDTが必要なのだがADTをインストールすると勝手にCDTもインストールされるので、別途インストールは不要。
設定
NDKのインストール場所を設定する必要がある。Preferences > Android > NDKにて設定する
ビルド
NDKを利用したプロジェクトをデバッグする前に、C/C++のコードをデバッグ指定(NDK_DEBUG=1)してビルドする。
% ndk-build NDK_DEBUG=1
実行(デバッグ手順)
デバッグする際は、Debug as > Android Native Applicationを指定して実行する。
で、あとはデバッグができる(変数の値、レジスタの値を見ることも可能)。動作中のコードに、ポンとBreakpointを仕掛けても指定した場所を実行する場合に止まってくれるので、気軽にデバッガが使える。
Javaを利用した際のデバッグだが、JavaのコードからJNIのコードへのシームレスにトレースするのはまだ大変な感じ。Debug As > Android Applicationで実行して、JavaのコードでいったんBreakpointで止めてから、しつこくStep Intoしていけば、最終的にCのコードにたどり着くことは可能。ただ、そこからCのコードにBreakpointを仕掛けて止める、といったことはまだできない。いつかはできるようになるんだけど。
とはいえ、NDKでデバッガできるようになったことは喜ばしいことなので、これからバンバンと活用していきたい。