1dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com#!/bin/bash 2dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com# 3dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com# android_gdb: Pushes parameter binary and gdbserver. Connects 4dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com# and enters debugging environment. 5dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com 6dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.comSCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" 77627535b8f968ba135e0ec16d15f30c31fe786d4borenet@google.comsource $SCRIPT_DIR/android_setup.sh 8dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com 97627535b8f968ba135e0ec16d15f30c31fe786d4borenet@google.comAPP_NAME=${APP_ARGS[0]} 107627535b8f968ba135e0ec16d15f30c31fe786d4borenet@google.comPORT=5039 11db5460bb79d7a67185387ea43b5427eb1036d9cacommit-bot@chromium.org 12dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.comsource $SCRIPT_DIR/utils/setup_adb.sh 13dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com 14dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com 15dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com# Forward local to remote socket connection. 16dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com$ADB forward "tcp:$PORT" "tcp:$PORT" 17dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com 18dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com# We kill all previous instances of gdbserver to rid all port overriding errors. 19dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com$ADB shell ps | grep gdbserver | awk '{print $2}' | xargs -r $ADB shell kill 20dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com 21dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com# We need the debug symbols from these files 22dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.comGDB_TMP_DIR=$(pwd)/android_gdb_tmp 237627535b8f968ba135e0ec16d15f30c31fe786d4borenet@google.commkdir -p $GDB_TMP_DIR 24dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.comecho "Copying symbol files" 25cc95b1aeb8cbb9201712c9982d12149b0e0027f0djsollen@google.comadb_pull_if_needed /system/bin/app_process $GDB_TMP_DIR 26cc95b1aeb8cbb9201712c9982d12149b0e0027f0djsollen@google.comadb_pull_if_needed /system/lib/libc.so $GDB_TMP_DIR 27cc95b1aeb8cbb9201712c9982d12149b0e0027f0djsollen@google.comadb_pull_if_needed /data/data/com.skia/lib/libskia_android.so $GDB_TMP_DIR 28cc95b1aeb8cbb9201712c9982d12149b0e0027f0djsollen@google.comadb_pull_if_needed /data/data/com.skia/lib/libSampleApp.so $GDB_TMP_DIR 29dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com 30e734c15aebae9f1d2abfb313db8121d77f5a5ef4commit-bot@chromium.orgecho "Pushing gdbserver..." 31e734c15aebae9f1d2abfb313db8121d77f5a5ef4commit-bot@chromium.orgadb_push_if_needed $ANDROID_TOOLCHAIN/../gdbserver /data/local/tmp 32e734c15aebae9f1d2abfb313db8121d77f5a5ef4commit-bot@chromium.org 33dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com# Launch the app 347627535b8f968ba135e0ec16d15f30c31fe786d4borenet@google.comSK_COMMAND="$APP_ARGS" 35dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.comecho "Running command $SK_COMMAND" 36cc95b1aeb8cbb9201712c9982d12149b0e0027f0djsollen@google.comadb shell am start -n com.skia/com.skia.SkiaSampleActivity 37dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com 38dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com# Attach gdbserver to the app process 39cc95b1aeb8cbb9201712c9982d12149b0e0027f0djsollen@google.comPID=$($ADB shell ps | grep com.skia | awk '{print $2}') 40dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.comecho "Attaching to pid: $PID" 41e734c15aebae9f1d2abfb313db8121d77f5a5ef4commit-bot@chromium.org$ADB shell /data/local/tmp/gdbserver :$PORT --attach $PID & 42dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com 43dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com# Wait for gdbserver 44dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.comsleep 2 45dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com 46dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com# Set up gdb commands 47dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.comGDBSETUP=$GDB_TMP_DIR/gdb.setup 48dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.comecho "file $GDB_TMP_DIR/app_process" >> $GDBSETUP 49dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.comecho "target remote :$PORT" >> $GDBSETUP 50dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.comecho "set solib-absolute-prefix $GDB_TMP_DIR" >> $GDBSETUP 51dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.comecho "set solib-search-path $GDB_TMP_DIR" >> $GDBSETUP 52dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com 53dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com# Launch gdb client 54dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.comecho "Entering gdb client shell" 5544566e2a157915974cfc08819e8f9182690092a1commit-bot@chromium.orgGDB_COMMAND=$(command ls "$ANDROID_TOOLCHAIN"/*-gdb | head -n1) 5644566e2a157915974cfc08819e8f9182690092a1commit-bot@chromium.org"$GDB_COMMAND" -x $GDBSETUP 57dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com 58dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com# Clean up 59dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.comrm -rf $GDB_TMP_DIR 60dcdd57faf02fb4fd23bb8265392b9c22e068907edjsollen@google.com 61