Developer's memo

開発メモ

【Android】【NDK】NDKで作成したCプログラムをデバッグする

 

NDKで作成したCプログラムをgdbデバッグする方法です。

 

デバッグするためにやっておくこと

  1. AndroidManifest.xmlandroid:debuggable="true"を設定
  2. ndk-build NDK_DEBUG=1 でビルドする

デバッグビルドをした場合、最適化が行われないため性能劣化すると言われています。性能試験やリリース時には NDK_DEBUG=1 をはずしましょう。

 

以上を行った上で.apkファイルを実機orシミュレータにインストールしておきます。

 

■いざデバッグ

初期化処理などでCプログラムを利用している箇所のデバッグをしたい場合は

JAVA側でCの処理を呼び出す前にブレークポイントを張って処理止める必要があります。

通常のJAVA側のデバッグ方法でブレークポイントまできたら、ターミナルで以下の

コマンドを実行します。

$ ndk-gdb

成功すれば、(gdb) とでて対話式の画面になるはずですので、Cの部分のデバッグはこれで行えます。

gdbの使い方に関してはここでは説明しません。

 

 

なお実機でデバッグ時に ndk-gdb を実行すると以下のエラーが出る場合があります。

$ ndk-gdb
ERROR: Could not extract package's data directory. Are you sure that
       your installed application is debuggable?

どうやら実機にアプリが多くインストールされていると起きるバグのようです。

以下のサイトに解説があります。

http://blog.kmckk.com/archives/3960006.html

 

自分は諦めてシミュレータでデバッグしました…。

 

参考書

http://www.amazon.co.jp/Android-NDK%E3%83%8D%E3%82%A4%E3%83%86%E3%82%A3%E3%83%96%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-%E5%87%BA%E6%9D%91-%E6%88%90%E5%92%8C/dp/4798030430