diff --git a/scripts/pid b/scripts/pid new file mode 100755 index 000000000..bb5d291a0 --- /dev/null +++ b/scripts/pid @@ -0,0 +1,35 @@ +#!/bin/bash +# Copyright (C) 2018 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Get the pid of processes matching a string. +prepend='' +append='' +if [ "$1" = "--exact" ]; then + prepend=' ' + append='$' + shift +fi +EXE="$1" +if [ "$EXE" ] ; then + PID=`adb shell ps \ + | tr -d '\r' \ + | \grep "$prepend$EXE$append" \ + | sed -e 's/^[^ ]* *\([0-9]*\).*$/\1/'` + echo "$PID" +else + echo "usage: pid [--exact] " + exit 255 +fi + diff --git a/scripts/stacks b/scripts/stacks new file mode 100755 index 000000000..7f4bb5ad5 --- /dev/null +++ b/scripts/stacks @@ -0,0 +1,43 @@ +#!/bin/bash +# Copyright (C) 2018 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Get backtraces for a process. +if [[ $1 =~ ^[0-9]+$ ]] ; then + PID="$1" +elif [ "$1" ] ; then + PIDLIST="$(pid $1)" + if [[ $PIDLIST =~ ^[0-9]+$ ]] ; then + 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 + # Use `debuggerd -j` on java processes. + if adb shell readlink /proc/$PID/exe | egrep -q '^/system/bin/app_process' ; then + # But not the zygote. + if ! adb shell cat /proc/$PID/cmdline | egrep -q '^zygote'; then + adb shell debuggerd -j $PID + exit $? + fi + fi + + adb shell debuggerd -b $PID +fi