Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b12c2e53 authored by Jeff Brown's avatar Jeff Brown
Browse files

Enhance 'stacks' script to handle native processes.

Automatically detects whether the process is native or managed
and dumps the stacks accordingly.

Change-Id: Ifba65279f1d1b9714b66aa6990bab05575871d28
parent b9fe2d2c
Loading
Loading
Loading
Loading
+34 −20
Original line number Diff line number Diff line
@@ -845,12 +845,22 @@ 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
        # 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
@@ -864,12 +874,16 @@ function stacks()

            # Dump stacks and wait for dump to finish
            adb shell kill -3 $PID
        adb shell notify $TRACES
            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 | less -S
            adb shell cat $TMP
        else
            # Dump stacks of native process
            adb shell debuggerd -b $PID
        fi
    fi
}