Fix stacks for Java processes.

Fix stacks for the change in ANR trace location by using `debuggerd -j`
instead of manually fetching the traces file.

Also, dump zygote/zygote64 as native processes, since they don't
respond to SIGQUIT.

Test: stacks zygote
Test: stacks adbd
Test: stacks com.android.settings
Change-Id: I015458bdc2dd45624940204d42614365aacf8304
This commit is contained in:
Josh Gao 2018-06-14 15:35:53 -07:00
parent acbfc3fb94
commit ab1e09a6b0
1 changed files with 9 additions and 25 deletions

View File

@ -1100,33 +1100,17 @@ function stacks()
fi
if [ "$PID" ] ; then
# 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
# 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
return
fi
fi
adb shell debuggerd -b $PID
fi
}
# Read the ELF header from /proc/$PID/exe to determine if the process is