http://groups.google.com/group/android-platform/browse_thread/thread/1227418641c53473
JNIライブラリで例外が発生した、などの状況をgdbで調べる方法。
adb shell setprop debug.db.uid 32767
としておく。/data/local.propに debug.db.uid = 32767 って書いといてもいけるかも。
すると例外発生時にdebuggerdが拾ってくれます。
adb logcat とかでログを見ると
I/DEBUG ( 21): ********************************************************
I/DEBUG ( 21): * process 513 crashed. debuggerd waiting for gdbserver
I/DEBUG ( 21): *
I/DEBUG ( 21): * adb shell gdbserver :port --attach 513 &
I/DEBUG ( 21): *
I/DEBUG ( 21): * and press the HOME key.
I/DEBUG ( 21): ********************************************************
などと出ているので、
adb shell /data/gdbserver :8888 --attach 513 &
とか。gdbserverはprebuiltに入っているので、/dataなどにadb pushしておく。また、adb forward tcp:8888 tcp:8888などでport転送を設定しておく。
これでgdbで接続できます。
$TOP/prebuilt/darwin-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi-gdb $TOP/out/target/product/dream/obj/SHARED_LIBRARIES/libruby_intermediates/LINKED/libruby.so
target remote localhost:8888
など。