#!/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
# Try --exact first, and fallback to nonexact if we find nothing.
PIDLIST=
"$(pid --exact $1 || 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