2009-01-19

Android Dev Phone 1 その12

Debugging native library crashes
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

など。