NDK付属のサンプルアプリhello-jniをgdbでデバッグする方法を試しておりますが、
下記のエラーにてprocessにattachができません。
実機のgdbserverでprocessをattachして開発PC側で確認したいのですが、
何かご存知の方がいらっしゃいましたら情報提供をお願いできないでしょうか。
--------------
$ gdbserver :12345 --attach 4718
Cannot attach to process 4718: Operation not permitted (1)
--------------
SDK: Android SDK 1.6 + Android NDK 1.6
実機: HT-03A ファーム 1.6
開発機: Mac OSX および Windows XP
1. hello-jni を実行可能に
+ Eclipse でプロジェクトを作成
+ $NDK/apps/hello-jni/Application.mk を修正
----
APP_PROJECT_PATH := $(call my-dir)/project
APP_MODULES := hello-jni
APP_CFLAGS := -g
----
+ make
$ make APP=hello-jni
2.デバッグ
+ AndroidManifest.xml の修正 (debuggable を true に)
+ onCreate メソドの先頭に breakpoint 設定
+ debug で実行
3. attach
+ gdbserver の転送
$ adb push
$NDK/build/prebuilt/darwin-x86/arm-eabi-4.2.1/bin/gdbserver /data/
local
- 書き込み可能なのは /data/local
+ 実行属性付ける
$ adb shell chmod 755 /data/local/gdbserver
+ tcp 通信で実機から開発端末の通信を可能にする
$ adb forward tcp:8888 tcp:8888
+ プロセス id の確認
$ adb shell ps
+ 接続
$ adb shell
+ gdbserver 起動
$ /data/local/gdbserver 0:8888 --attach <PID>
gdbserverの起動はadb shellからなので、プロセスのユーザはshellですし、hello-jniはDalvikのプロセスごとに
作られるユーザapp-xx(xxは数値)の所有になるかと思います。
shellユーザは特権ユーザではないので、別ユーザ所有のプロセスにはAttachできません。
なので、rootedなデバイス(orエミュレータ)を使ってroot権限でgdbserverを実行するしか無いでしょう。
豊田です。
情報提供ありがとうございます。
プロセスの所有者について確認いたしました。
確かに上述の通りでした。
rootedな環境ではないので、
printなどでログをだしてデバッグする方向で
アプローチしてみたいと思っています。
大変助かりました。ありがとうございました。