From ab1e09a6b001af97f1b6d8bf95d188ab2b2a761a Mon Sep 17 00:00:00 2001 From: Josh Gao Date: Thu, 14 Jun 2018 15:35:53 -0700 Subject: [PATCH] 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 --- envsetup.sh | 34 +++++++++------------------------- 1 file changed, 9 insertions(+), 25 deletions(-) diff --git a/envsetup.sh b/envsetup.sh index bad16e23e..a7c99aa16 100644 --- a/envsetup.sh +++ b/envsetup.sh @@ -1100,32 +1100,16 @@ 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 }