XPERIA Z1f というか Z1 Compact を接続できるようになったので、早速ネイティブデバッグができるかどうかを試してみたいと思います。
一番の心配事はこの端末が Android 4.3 を標準で採用しており、以前の記事にもあったように 4.3 では複数の端末でデバッグできないという状況になっている点です。
早速 hello-jni サンプルを用いて、デバッグ接続がうまくできるか確認してみます。
Java側でブレークポイント設定しておいて、そのときに ndk-gdb を起動させてみたのがこちらになります。
予想に反して、うまくndk-gdb 接続できており、ネイティブデバッグが使用可能でした。gdbコマンドを実行してブレークポイントを設定して、そのときのコールスタック情報を確認することもできました。
一応、/proc の下を確認してみたいと思います。前回と同様に調査してみます。
u0_a210 16498 398 859000 20328 ffffffff 00000000 S com.example.hellojni u0_a210 17151 10691 592 316 ffffffff 00000000 S lib/gdbserver shell@D5503:/ $ run-as com.example.hellojni run-as com.example.hellojni shell@D5503:/data/data/com.example.hellojni $ cd /proc/16498 cd /proc/16498 shell@D5503:/proc/16498 $ ls -l ls -l dr-xr-xr-x u0_a210 u0_a210 2014-03-15 13:00 attr -r-------- u0_a210 u0_a210 0 2014-03-15 12:41 auxv -r--r--r-- u0_a210 u0_a210 0 2014-03-15 13:00 cgroup --w------- u0_a210 u0_a210 0 2014-03-15 13:00 clear_refs -r--r--r-- u0_a210 u0_a210 0 2014-03-15 12:40 cmdline -rw-r--r-- u0_a210 u0_a210 0 2014-03-15 13:00 comm -rw-r--r-- u0_a210 u0_a210 0 2014-03-15 13:00 coredump_filter lrwxrwxrwx u0_a210 u0_a210 2014-03-15 13:00 cwd -> / -r-------- u0_a210 u0_a210 0 2014-03-15 13:00 environ lrwxrwxrwx u0_a210 u0_a210 2014-03-15 12:41 exe -> /system/bin/app_process dr-x------ u0_a210 u0_a210 2014-03-15 13:00 fd dr-x------ u0_a210 u0_a210 2014-03-15 13:00 fdinfo -r-------- u0_a210 u0_a210 0 2014-03-15 13:00 io -r--r--r-- u0_a210 u0_a210 0 2014-03-15 13:00 limits -rw-r--r-- u0_a210 u0_a210 0 2014-03-15 13:00 loginuid -r--r--r-- u0_a210 u0_a210 0 2014-03-15 13:00 maps -rw------- u0_a210 u0_a210 0 2014-03-15 12:41 mem -r--r--r-- u0_a210 u0_a210 0 2014-03-15 13:00 mountinfo -r--r--r-- u0_a210 u0_a210 0 2014-03-15 13:00 mounts -r-------- u0_a210 u0_a210 0 2014-03-15 13:00 mountstats dr-xr-xr-x u0_a210 u0_a210 2014-03-15 13:00 net dr-x--x--x u0_a210 u0_a210 2014-03-15 13:00 ns -rw-r--r-- u0_a210 u0_a210 0 2014-03-15 12:40 oom_adj -r--r--r-- u0_a210 u0_a210 0 2014-03-15 13:00 oom_score -rw-r--r-- u0_a210 u0_a210 0 2014-03-15 13:00 oom_score_adj -r--r--r-- u0_a210 u0_a210 0 2014-03-15 13:00 pagemap -r--r--r-- u0_a210 u0_a210 0 2014-03-15 13:00 personality lrwxrwxrwx u0_a210 u0_a210 2014-03-15 13:00 root -> / -rw-r--r-- u0_a210 u0_a210 0 2014-03-15 13:00 sched -r--r--r-- u0_a210 u0_a210 0 2014-03-15 13:00 schedstat -r--r--r-- u0_a210 u0_a210 0 2014-03-15 13:00 sessionid -r--r--r-- u0_a210 u0_a210 0 2014-03-15 13:00 smaps -r--r--r-- u0_a210 u0_a210 0 2014-03-15 13:00 stack -r--r--r-- u0_a210 u0_a210 0 2014-03-15 12:40 stat -r--r--r-- u0_a210 u0_a210 0 2014-03-15 13:00 statm -r--r--r-- u0_a210 u0_a210 0 2014-03-15 13:00 status dr-xr-xr-x u0_a210 u0_a210 2014-03-15 12:40 task -r--r--r-- u0_a210 u0_a210 0 2014-03-15 13:00 wchan shell@D5503:/proc/16498 $ shell@D5503:/proc $ cd ../17151 cd 17151 shell@D5503:/proc/17151 $ ls -l ls -l dr-xr-xr-x u0_a210 u0_a210 2014-03-15 13:06 attr -r-------- u0_a210 u0_a210 0 2014-03-15 13:06 auxv -r--r--r-- u0_a210 u0_a210 0 2014-03-15 13:06 cgroup --w------- u0_a210 u0_a210 0 2014-03-15 13:06 clear_refs -r--r--r-- u0_a210 u0_a210 0 2014-03-15 12:41 cmdline -rw-r--r-- u0_a210 u0_a210 0 2014-03-15 13:06 comm -rw-r--r-- u0_a210 u0_a210 0 2014-03-15 13:06 coredump_filter lrwxrwxrwx u0_a210 u0_a210 2014-03-15 13:06 cwd -> /data/data/com.example.hellojni -r-------- u0_a210 u0_a210 0 2014-03-15 13:06 environ lrwxrwxrwx u0_a210 u0_a210 2014-03-15 13:06 exe -> /data/app-lib/com.example.hellojni-2/gdbserver dr-x------ u0_a210 u0_a210 2014-03-15 13:06 fd dr-x------ u0_a210 u0_a210 2014-03-15 13:06 fdinfo -r-------- u0_a210 u0_a210 0 2014-03-15 13:06 io -r--r--r-- u0_a210 u0_a210 0 2014-03-15 13:06 limits -rw-r--r-- u0_a210 u0_a210 0 2014-03-15 13:06 loginuid -r--r--r-- u0_a210 u0_a210 0 2014-03-15 13:06 maps -rw------- u0_a210 u0_a210 0 2014-03-15 13:06 mem -r--r--r-- u0_a210 u0_a210 0 2014-03-15 13:06 mountinfo -r--r--r-- u0_a210 u0_a210 0 2014-03-15 13:06 mounts -r-------- u0_a210 u0_a210 0 2014-03-15 13:06 mountstats dr-xr-xr-x u0_a210 u0_a210 2014-03-15 13:06 net dr-x--x--x u0_a210 u0_a210 2014-03-15 13:06 ns -rw-r--r-- u0_a210 u0_a210 0 2014-03-15 12:41 oom_adj -r--r--r-- u0_a210 u0_a210 0 2014-03-15 13:06 oom_score -rw-r--r-- u0_a210 u0_a210 0 2014-03-15 13:06 oom_score_adj -r--r--r-- u0_a210 u0_a210 0 2014-03-15 13:06 pagemap -r--r--r-- u0_a210 u0_a210 0 2014-03-15 13:06 personality lrwxrwxrwx u0_a210 u0_a210 2014-03-15 13:06 root -> / -rw-r--r-- u0_a210 u0_a210 0 2014-03-15 13:06 sched -r--r--r-- u0_a210 u0_a210 0 2014-03-15 13:06 schedstat -r--r--r-- u0_a210 u0_a210 0 2014-03-15 13:06 sessionid -r--r--r-- u0_a210 u0_a210 0 2014-03-15 13:06 smaps -r--r--r-- u0_a210 u0_a210 0 2014-03-15 13:06 stack -r--r--r-- u0_a210 u0_a210 0 2014-03-15 12:41 stat -r--r--r-- u0_a210 u0_a210 0 2014-03-15 13:06 statm -r--r--r-- u0_a210 u0_a210 0 2014-03-15 13:06 status dr-xr-xr-x u0_a210 u0_a210 2014-03-15 12:41 task -r--r--r-- u0_a210 u0_a210 0 2014-03-15 13:06 wchan
正常なパーミッションとなっていることが確認できました。
当然この maps を確認してみると・・・(一部抜粋)
shell@D5503:/proc/16498 $ cat maps 70d6a000-70d6d000 r-xp 00000000 b3:19 292071 /data/app-lib/com.example.hellojni-2/libhello-jni.so 70d6d000-70d6e000 r--p 00002000 b3:19 292071 /data/app-lib/com.example.hellojni-2/libhello-jni.so 70d6e000-70d6f000 rw-p 00003000 b3:19 292071 /data/app-lib/com.example.hellojni-2/libhello-jni.so shell@D5503:/proc/17151 $ cat maps cat maps 00008000-00046000 r-xp 00000000 b3:19 292072 /data/app-lib/com.example.hellojni-2/gdbserver 00047000-00049000 rw-p 0003e000 b3:19 292072 /data/app-lib/com.example.hellojni-2/gdbserver 00049000-0004d000 rw-p 00000000 00:00 0 00966000-0097a000 rw-p 00000000 00:00 0 [heap] b6f57000-b6f58000 r--p 00000000 00:00 0 b6f58000-b6f70000 r--s 00000000 00:0c 6131 /dev/__properties__
このようになっており、自身のsoの情報も確認できました。どおりで正常にデバッグできる訳です。
Android 4.3 搭載で初めてネイティブデバッグ(ndk-gdb)が動く端末に出逢いました。運がよかったと思います。