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