| OLD | NEW | 
|     1 #!/bin/bash |     1 #!/bin/bash | 
|     2 # |     2 # | 
|     3 # Copyright (c) 2012 The Chromium Authors. All rights reserved. |     3 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 
|     4 # Use of this source code is governed by a BSD-style license that can be |     4 # Use of this source code is governed by a BSD-style license that can be | 
|     5 # found in the LICENSE file. |     5 # found in the LICENSE file. | 
|     6 # |     6 # | 
|     7  |     7  | 
|     8 # A generic script used to attach to a running Chromium process and |     8 # A generic script used to attach to a running Chromium process and | 
|     9 # debug it. Most users should not use this directly, but one of the |     9 # debug it. Most users should not use this directly, but one of the | 
|    10 # wrapper scripts like adb_gdb_content_shell |    10 # wrapper scripts like adb_gdb_content_shell | 
| (...skipping 823 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   834   echo "WARNING: --sandboxed option ignored due to use of --pid." |   834   echo "WARNING: --sandboxed option ignored due to use of --pid." | 
|   835 fi |   835 fi | 
|   836  |   836  | 
|   837 # Determine if 'adb shell' runs as root or not. |   837 # Determine if 'adb shell' runs as root or not. | 
|   838 # If so, we can launch gdbserver directly, otherwise, we have to |   838 # If so, we can launch gdbserver directly, otherwise, we have to | 
|   839 # use run-as $PACKAGE_NAME ..., which requires the package to be debuggable. |   839 # use run-as $PACKAGE_NAME ..., which requires the package to be debuggable. | 
|   840 # |   840 # | 
|   841 if [ "$SU_PREFIX" ]; then |   841 if [ "$SU_PREFIX" ]; then | 
|   842   # Need to check that this works properly. |   842   # Need to check that this works properly. | 
|   843   SU_PREFIX_TEST_LOG=$TMPDIR/su-prefix.log |   843   SU_PREFIX_TEST_LOG=$TMPDIR/su-prefix.log | 
|   844   adb_shell $SU_PREFIX echo "foo" > $SU_PREFIX_TEST_LOG 2>&1 |   844   adb_shell $SU_PREFIX \"echo "foo"\" > $SU_PREFIX_TEST_LOG 2>&1 | 
|   845   if [ $? != 0 -o "$(cat $SU_PREFIX_TEST_LOG)" != "foo" ]; then |   845   if [ $? != 0 -o "$(cat $SU_PREFIX_TEST_LOG)" != "foo" ]; then | 
|   846     echo "ERROR: Cannot use '$SU_PREFIX' as a valid su prefix:" |   846     echo "ERROR: Cannot use '$SU_PREFIX' as a valid su prefix:" | 
|   847     echo "$ adb shell $SU_PREFIX echo foo" |   847     echo "$ adb shell $SU_PREFIX echo foo" | 
|   848     cat $SU_PREFIX_TEST_LOG |   848     cat $SU_PREFIX_TEST_LOG | 
|   849     exit 1 |   849     exit 1 | 
|   850   fi |   850   fi | 
|   851   COMMAND_PREFIX="$SU_PREFIX" |   851   COMMAND_PREFIX="$SU_PREFIX" | 
|   852 else |   852 else | 
|   853   SHELL_UID=$(adb shell cat /proc/self/status | \ |   853   SHELL_UID=$(adb shell cat /proc/self/status | \ | 
|   854               awk '$1 == "Uid:" { print $2; }') |   854               awk '$1 == "Uid:" { print $2; }') | 
|   855   log "Shell UID: $SHELL_UID" |   855   log "Shell UID: $SHELL_UID" | 
|   856   if [ "$SHELL_UID" != 0 -o -n "$NO_ROOT" ]; then |   856   if [ "$SHELL_UID" != 0 -o -n "$NO_ROOT" ]; then | 
|   857     COMMAND_PREFIX="run-as $PACKAGE_NAME" |   857     COMMAND_PREFIX="run-as $PACKAGE_NAME" | 
|   858   else |   858   else | 
|   859     COMMAND_PREFIX= |   859     COMMAND_PREFIX= | 
|   860   fi |   860   fi | 
|   861 fi |   861 fi | 
|   862 log "Command prefix: '$COMMAND_PREFIX'" |   862 log "Command prefix: '$COMMAND_PREFIX'" | 
|   863  |   863  | 
|   864 # Pull device's system libraries that are mapped by our process. |   864 # Pull device's system libraries that are mapped by our process. | 
|   865 # Pulling all system libraries is too long, so determine which ones |   865 # Pulling all system libraries is too long, so determine which ones | 
|   866 # we need by looking at /proc/$PID/maps instead |   866 # we need by looking at /proc/$PID/maps instead | 
|   867 if [ "$PULL_LIBS" -a -z "$NO_PULL_LIBS" ]; then |   867 if [ "$PULL_LIBS" -a -z "$NO_PULL_LIBS" ]; then | 
|   868   echo "Extracting system libraries into: $PULL_LIBS_DIR" |   868   echo "Extracting system libraries into: $PULL_LIBS_DIR" | 
|   869   rm -f $PULL_LIBS_DIR/build.prop |   869   rm -f $PULL_LIBS_DIR/build.prop | 
|   870   MAPPINGS=$(adb_shell $COMMAND_PREFIX cat /proc/$PID/maps) |   870   MAPPINGS=$(adb_shell $COMMAND_PREFIX \"cat /proc/$PID/maps\") | 
|   871   if [ $? != 0 ]; then |   871   if [ $? != 0 ]; then | 
|   872     echo "ERROR: Could not list process's memory mappings." |   872     echo "ERROR: Could not list process's memory mappings." | 
|   873     if [ "$SU_PREFIX" ]; then |   873     if [ "$SU_PREFIX" ]; then | 
|   874       panic "Are you sure your --su-prefix is correct?" |   874       panic "Are you sure your --su-prefix is correct?" | 
|   875     else |   875     else | 
|   876       panic "Use --su-prefix if the application is not debuggable." |   876       panic "Use --su-prefix if the application is not debuggable." | 
|   877     fi |   877     fi | 
|   878   fi |   878   fi | 
|   879   SYSTEM_LIBS=$(echo "$MAPPINGS" | \ |   879   SYSTEM_LIBS=$(echo "$MAPPINGS" | \ | 
|   880       awk '$6 ~ /\/system\/.*\.so$/ { print $6; }' | sort -u) |   880       awk '$6 ~ /\/system\/.*\.so$/ { print $6; }' | sort -u) | 
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   937  |   937  | 
|   938 # Start gdbserver in the background |   938 # Start gdbserver in the background | 
|   939 # Note that using run-as requires the package to be debuggable. |   939 # Note that using run-as requires the package to be debuggable. | 
|   940 # |   940 # | 
|   941 # If not, this will fail horribly. The alternative is to run the |   941 # If not, this will fail horribly. The alternative is to run the | 
|   942 # program as root, which requires of course root privileges. |   942 # program as root, which requires of course root privileges. | 
|   943 # Maybe we should add a --root option to enable this? |   943 # Maybe we should add a --root option to enable this? | 
|   944 # |   944 # | 
|   945 log "Starting gdbserver in the background:" |   945 log "Starting gdbserver in the background:" | 
|   946 GDBSERVER_LOG=$TMPDIR/gdbserver-$TMP_ID.log |   946 GDBSERVER_LOG=$TMPDIR/gdbserver-$TMP_ID.log | 
|   947 log "adb shell $COMMAND_PREFIX $TARGET_GDBSERVER :$TARGET_PORT \ |   947 log "adb shell $COMMAND_PREFIX \"$TARGET_GDBSERVER :$TARGET_PORT \ | 
|   948 --attach $PID" |   948 --attach $PID"\" | 
|   949 ("$ADB" shell $COMMAND_PREFIX $TARGET_GDBSERVER :$TARGET_PORT \ |   949 ("$ADB" shell $COMMAND_PREFIX \"$TARGET_GDBSERVER :$TARGET_PORT \ | 
|   950  --attach $PID > $GDBSERVER_LOG 2>&1) & |   950  --attach $PID\" > $GDBSERVER_LOG 2>&1) & | 
|   951 GDBSERVER_PID=$! |   951 GDBSERVER_PID=$! | 
|   952 echo "$GDBSERVER_PID" > $GDBSERVER_PIDFILE |   952 echo "$GDBSERVER_PID" > $GDBSERVER_PIDFILE | 
|   953 log "background job pid: $GDBSERVER_PID" |   953 log "background job pid: $GDBSERVER_PID" | 
|   954  |   954  | 
|   955 # Check that it is still running after a few seconds. If not, this means we |   955 # Check that it is still running after a few seconds. If not, this means we | 
|   956 # could not properly attach to it |   956 # could not properly attach to it | 
|   957 sleep 2 |   957 sleep 2 | 
|   958 log "Job control: $(jobs -l)" |   958 log "Job control: $(jobs -l)" | 
|   959 STATE=$(jobs -l | awk '$2 == "'$GDBSERVER_PID'" { print $3; }') |   959 STATE=$(jobs -l | awk '$2 == "'$GDBSERVER_PID'" { print $3; }') | 
|   960 if [ "$STATE" != "Running" ]; then |   960 if [ "$STATE" != "Running" ]; then | 
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1003  |  1003  | 
|  1004 if [ "$VERBOSE" -gt 0 ]; then |  1004 if [ "$VERBOSE" -gt 0 ]; then | 
|  1005   echo "### START $COMMANDS" |  1005   echo "### START $COMMANDS" | 
|  1006   cat $COMMANDS |  1006   cat $COMMANDS | 
|  1007   echo "### END $COMMANDS" |  1007   echo "### END $COMMANDS" | 
|  1008 fi |  1008 fi | 
|  1009  |  1009  | 
|  1010 log "Launching gdb client: $GDB $GDB_ARGS -x $COMMANDS" |  1010 log "Launching gdb client: $GDB $GDB_ARGS -x $COMMANDS" | 
|  1011 $GDB $GDB_ARGS -x $COMMANDS && |  1011 $GDB $GDB_ARGS -x $COMMANDS && | 
|  1012 rm -f "$GDBSERVER_PIDFILE" |  1012 rm -f "$GDBSERVER_PIDFILE" | 
| OLD | NEW |