linuxでのgdbclientの使い方
android gdb debug - のねの日記
コマンドラインのgdbclientの方法を応用し、eclipseでデバッグ - のねの日記
linuxでのgdbclientの使い方 - のねの日記
ソースをmakeした環境での話です。
gdbのコマンドを打ちたいとき。
PATHや環境変数の準備2つ端末画面を開く。. build/envsetup lunch maguro-full
1番目の端末画面adb forward tcp:5039 tcp:5039 adb shell $su #gdbserver :5039 --attach 790 (gdbserver :5039 /system/bin/app_process)でもいい。 Attached; pid = 790 Listening on port 5039 Remote debugging from host 127.0.0.1gdbserverを起動する。 790はattachしたいPIDです。 (app_processのPID)
2番目の端末画面gdbclient app_process :5039 790 (gdbclient app_process :5039)でもいい。これでgdbのコマンドが打てる。
Cannot attach to lwp 790: Operation not permitted (1) このようなエラーが出る理由は、adb shellにルート権限がないためです。 $adb root でroot権限が持てます。
dddを使う場合、以下のようにenvsetup.shへ追加します。ddd --debugger arm-eabi-gdb -x "$OUT_ROOT/gdbclient.cmds" "$OUT_EXE_SYMBOLS/$EXE"dddclient app_process :5039 308
gdbclient () { local OUT_ROOT=$(get_abs_build_var PRODUCT_OUT); local OUT_SYMBOLS=$(get_abs_build_var TARGET_OUT_UNSTRIPPED); local OUT_SO_SYMBOLS=$(get_abs_build_var TARGET_OUT_SHARED_LIBRARIES_UNSTRIPPED); local OUT_EXE_SYMBOLS=$(get_abs_build_var TARGET_OUT_EXECUTABLES_UNSTRIPPED); local PREBUILTS=$(get_abs_build_var ANDROID_PREBUILTS); local ARCH=$(get_build_var TARGET_ARCH); local GDB; case "$ARCH" in x86) GDB=i686-linux-android-gdb ;; arm) GDB=arm-linux-androideabi-gdb ;; mips) GDB=mipsel-linux-android-gdb ;; *) echo "Unknown arch $ARCH"; return 1 ;; esac; if [ "$OUT_ROOT" -a "$PREBUILTS" ]; then local EXE="$1"; if [ "$EXE" ]; then EXE=$1; else EXE="app_process"; fi; local PORT="$2"; if [ "$PORT" ]; then PORT=$2; else PORT=":5039"; fi; local PID; local PROG="$3"; if [ "$PROG" ]; then if [[ "$PROG" =~ ^[0-9]+$ ]]; then PID="$3"; else PID=`pid $3`; fi; adb forward "tcp$PORT" "tcp$PORT"; adb shell gdbserver $PORT --attach $PID & sleep 2; else echo ""; echo "If you haven't done so already, do this first on the device:"; echo " gdbserver $PORT /system/bin/$EXE"; echo " or"; echo " gdbserver $PORT --attach $PID"; echo ""; fi; echo "set solib-absolute-prefix $OUT_SYMBOLS" >|"$OUT_ROOT/gdbclient.cmds"; echo "set solib-search-path $OUT_SO_SYMBOLS:$OUT_SO_SYMBOLS/hw:$OUT_SO_SYMBOLS/ssl/engines:$OUT_SO_SYMBOLS/drm:$OUT_SO_SYMBOLS/egl:$OUT_SO_SYMBOLS/soundfx" >> "$OUT_ROOT/gdbclient.cmds"; echo "target remote $PORT" >> "$OUT_ROOT/gdbclient.cmds"; echo "" >> "$OUT_ROOT/gdbclient.cmds"; $ANDROID_TOOLCHAIN/$GDB -x "$OUT_ROOT/gdbclient.cmds" "$OUT_EXE_SYMBOLS/$EXE"; else echo "Unable to determine build system output dir."; fi }