X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=envsetup.sh;h=0661fe66fa49ed48830383eb771c3b83d6a06ec7;hb=1a00f7fecd240871caa219bb45460b43c652c604;hp=d64bd29c1a9833bbe0b7cf8577b628d8f489fc2f;hpb=a825aa1329cbf28e23a9f7d96dbbe16f3f7ef9db;p=android-x86%2Fbuild.git diff --git a/envsetup.sh b/envsetup.sh index d64bd29c1..0661fe66f 100644 --- a/envsetup.sh +++ b/envsetup.sh @@ -638,6 +638,9 @@ function mm() # Find the closest Android.mk file. T=$(gettop) local M=$(findmakefile) + local MODULES= + local GET_INSTALL_PATH= + local ARGS= # Remove the path to top as the makefilepath needs to be relative local M=`echo $M|sed 's:'$T'/::'` if [ ! "$T" ]; then @@ -645,7 +648,19 @@ function mm() elif [ ! "$M" ]; then echo "Couldn't locate a makefile from the current directory." else - ONE_SHOT_MAKEFILE=$M make -C $T -f build/core/main.mk all_modules $@ + for ARG in $@; do + case $ARG in + GET-INSTALL-PATH) GET_INSTALL_PATH=$ARG;; + esac + done + if [ -n "$GET_INSTALL_PATH" ]; then + MODULES= + ARGS=GET-INSTALL-PATH + else + MODULES=all_modules + ARGS=$@ + fi + ONE_SHOT_MAKEFILE=$M make -C $T -f build/core/main.mk $MODULES $ARGS fi fi } @@ -658,6 +673,7 @@ function mmm() local MODULES= local ARGS= local DIR TO_CHOP + local GET_INSTALL_PATH= local DASH_ARGS=$(echo "$@" | awk -v RS=" " -v ORS=" " '/^-.*$/') local DIRS=$(echo "$@" | awk -v RS=" " -v ORS=" " '/^[^-].*$/') for DIR in $DIRS ; do @@ -667,10 +683,10 @@ function mmm() fi DIR=`echo $DIR | sed -e 's/:.*//' -e 's:/$::'` if [ -f $DIR/Android.mk ]; then - TO_CHOP=`(\cd -P -- $T && pwd -P) | wc -c | tr -d ' '` - TO_CHOP=`expr $TO_CHOP + 1` - START=`PWD= /bin/pwd` - MFILE=`echo $START | cut -c${TO_CHOP}-` + local TO_CHOP=`(\cd -P -- $T && pwd -P) | wc -c | tr -d ' '` + local TO_CHOP=`expr $TO_CHOP + 1` + local START=`PWD= /bin/pwd` + local MFILE=`echo $START | cut -c${TO_CHOP}-` if [ "$MFILE" = "" ] ; then MFILE=$DIR/Android.mk else @@ -678,20 +694,17 @@ function mmm() fi MAKEFILE="$MAKEFILE $MFILE" else - if [ "$DIR" = snod ]; then - ARGS="$ARGS snod" - elif [ "$DIR" = showcommands ]; then - ARGS="$ARGS showcommands" - elif [ "$DIR" = dist ]; then - ARGS="$ARGS dist" - elif [ "$DIR" = incrementaljavac ]; then - ARGS="$ARGS incrementaljavac" - else - echo "No Android.mk in $DIR." - return 1 - fi + case $DIR in + showcommands | snod | dist | incrementaljavac) ARGS="$ARGS $DIR";; + GET-INSTALL-PATH) GET_INSTALL_PATH=$DIR;; + *) echo "No Android.mk in $DIR."; return 1;; + esac fi done + if [ -n "$GET_INSTALL_PATH" ]; then + ARGS=$GET_INSTALL_PATH + MODULES= + fi ONE_SHOT_MAKEFILE="$MAKEFILE" make -C $T -f build/core/main.mk $DASH_ARGS $MODULES $ARGS else echo "Couldn't locate the top of the tree. Try setting TOP." @@ -774,15 +787,50 @@ function cproj() echo "can't find Android.mk" } +# simplified version of ps; output in the form +# +function qpid() { + local prepend='' + local append='' + if [ "$1" = "--exact" ]; then + prepend=' ' + append='$' + shift + elif [ "$1" = "--help" -o "$1" = "-h" ]; then + echo "usage: qpid [[--exact] " + return 255 + fi + + local EXE="$1" + if [ "$EXE" ] ; then + qpid | \grep "$prepend$EXE$append" + else + adb shell ps \ + | tr -d '\r' \ + | sed -e 1d -e 's/^[^ ]* *\([0-9]*\).* \([^ ]*\)$/\1 \2/' + fi +} + function pid() { - local EXE="$1" - if [ "$EXE" ] ; then - local PID=`adb shell ps | fgrep $1 | sed -e 's/[^ ]* *\([0-9]*\).*/\1/'` - echo "$PID" - else - echo "usage: pid name" - fi + local prepend='' + local append='' + if [ "$1" = "--exact" ]; then + prepend=' ' + append='$' + shift + fi + local EXE="$1" + if [ "$EXE" ] ; then + local PID=`adb shell ps \ + | tr -d '\r' \ + | \grep "$prepend$EXE$append" \ + | sed -e 's/^[^ ]* *\([0-9]*\).*$/\1/'` + echo "$PID" + else + echo "usage: pid [--exact] " + return 255 + fi } # systemstack - dump the current stack trace of all threads in the system process @@ -797,31 +845,45 @@ function stacks() if [[ $1 =~ ^[0-9]+$ ]] ; then local PID="$1" elif [ "$1" ] ; then - local PID=$(pid $1) + local PIDLIST="$(pid $1)" + if [[ $PIDLIST =~ ^[0-9]+$ ]] ; then + local PID="$PIDLIST" + elif [ "$PIDLIST" ] ; then + echo "more than one process: $1" + else + echo "no such process: $1" + fi else echo "usage: stacks [pid|process name]" fi if [ "$PID" ] ; then - local TRACES=/data/anr/traces.txt - local ORIG=/data/anr/traces.orig - local TMP=/data/anr/traces.tmp - - # Keep original traces to avoid clobbering - adb shell mv $TRACES $ORIG - - # Make sure we have a usable file - adb shell touch $TRACES - adb shell chmod 666 $TRACES - - # Dump stacks and wait for dump to finish - adb shell kill -3 $PID - adb shell notify $TRACES - - # Restore original stacks, and show current output - adb shell mv $TRACES $TMP - adb shell mv $ORIG $TRACES - adb shell cat $TMP | less -S + # Determine whether the process is native + if adb shell ls -l /proc/$PID/exe | grep -q /system/bin/app_process ; then + # Dump stacks of Dalvik process + local TRACES=/data/anr/traces.txt + local ORIG=/data/anr/traces.orig + local TMP=/data/anr/traces.tmp + + # Keep original traces to avoid clobbering + adb shell mv $TRACES $ORIG + + # Make sure we have a usable file + adb shell touch $TRACES + adb shell chmod 666 $TRACES + + # Dump stacks and wait for dump to finish + adb shell kill -3 $PID + adb shell notify $TRACES >/dev/null + + # Restore original stacks, and show current output + adb shell mv $TRACES $TMP + adb shell mv $ORIG $TRACES + adb shell cat $TMP + else + # Dump stacks of native process + adb shell debuggerd -b $PID + fi fi } @@ -868,7 +930,7 @@ function gdbclient() if [[ ! "$PID" =~ ^[0-9]+$ ]] ; then # that likely didn't work because of returning multiple processes # try again, filtering by root processes (don't contain colon) - PID=`adb shell ps | grep $3 | grep -v ":" | awk '{print $2}'` + PID=`adb shell ps | \grep $3 | \grep -v ":" | awk '{print $2}'` if [[ ! "$PID" =~ ^[0-9]+$ ]] then echo "Couldn't resolve '$3' to single PID" @@ -894,6 +956,7 @@ function gdbclient() echo >|"$OUT_ROOT/gdbclient.cmds" "set solib-absolute-prefix $OUT_SYMBOLS" echo >>"$OUT_ROOT/gdbclient.cmds" "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" + echo >>"$OUT_ROOT/gdbclient.cmds" "source $ANDROID_BUILD_TOP/development/scripts/gdb/dalvik.gdb" echo >>"$OUT_ROOT/gdbclient.cmds" "target remote $PORT" echo >>"$OUT_ROOT/gdbclient.cmds" "" @@ -1060,7 +1123,7 @@ function runhat() fi # issue "am" command to cause the hprof dump - local sdcard=$(adb shell echo -n '$EXTERNAL_STORAGE') + local sdcard=$(adb ${adbOptions} shell echo -n '$EXTERNAL_STORAGE') local devFile=$sdcard/hprof-$targetPid #local devFile=/data/local/hprof-$targetPid echo "Poking $targetPid and waiting for data..."