Z1 Compact で ndk-gdb を試す

XPERIA Z1f というか Z1 Compact を接続できるようになったので、早速ネイティブデバッグができるかどうかを試してみたいと思います。
一番の心配事はこの端末が Android 4.3 を標準で採用しており、以前の記事にもあったように 4.3 では複数の端末でデバッグできないという状況になっている点です。

早速 hello-jni サンプルを用いて、デバッグ接続がうまくできるか確認してみます。
Java側でブレークポイント設定しておいて、そのときに ndk-gdb を起動させてみたのがこちらになります。

xperia-z1comact-1

予想に反して、うまくndk-gdb 接続できており、ネイティブデバッグが使用可能でした。gdbコマンドを実行してブレークポイントを設定して、そのときのコールスタック情報を確認することもできました。

xperia-z1comact-2

一応、/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)が動く端末に出逢いました。運がよかったと思います。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする