ザウルスをアンドロイドにしてあげる
本館 Android Zaurus
2009-08-06
DDMSでAndroidのNative Heapをのぞきみる
9/22/2010 Update
libc.soの置き換えは不要*1。
# adb shell setprop libc.debug.malloc 1 # adb shell stop # adb shell start
始まりはいつもandroid-porting*2。Nativeのメモリリーク調べるにはどーしたらいいの?という質問に、それDDMSで出来るよという回答*3が。ターゲットのlibc.soをlibc_debug.soに入れ替えて、ホストの~/.android/ddms.cfgに"native=true"を追加して、ddmsを起動するらしい。
とことで、早速やってみた。libc.soをlibc_debug.soに置き換えて、Androidを再起動するとlogcatにそれっぽいメッセージがでる。
I/libc ( 1376): /system/bin/sh using MALLOC_DEBUG = 1 (leak checker) I/libc ( 1377): logcat using MALLOC_DEBUG = 1 (leak checker)
おもむろにDDMSを起動すると、新しくNative Heapというタグが出現する。見たいプロセスを選んで[Full Update]ボタンを押すらしい。
なんか取れた。アドレスがバイナリで何が何やら。[Load Symbols]ってボタンはグレーアウトしたまま。しょうがないのでobjdumpしてみた。
$ cd myrdroid/out/target/product/generic/symbols/system/lib $ arm-none-linux-gnueabi-objdump -t libc_debug.so | sort | \ grep ^0000a9 0000a938 l F .text 0000022c leak_malloc
DDMSで表示しているの8000a98cは、leak_mallocでしょう、たぶん。違ってたら指摘ツッコミ毀誉褒貶よろ。これがどれくらい使えるかは、実際にリークするライブラリを作るか、既存のfree()を潰してリークするバイナリを作るとかしないとなので、時間があったら、また。とことで。(え゛ーーー
androidzaurus
2009/08/08 11:27
[Load Symbols]するには、DDMSをビルドし直す。すると、自動的にout/targetからシンボルを拾うようになる。
androidzaurus
2009/09/03 07:05
arm-eabi-addr2lineへのPATHを設定して、ANDROID_PRODUCT_OUTに/symbolsへのパスを設定するといい。らしい。
