adb push path_to_gdbserver /data/local/tmp/gdbserver run-as package_name mkdir -p /data/data/package_name/gdb/bin cat /data/local/tmp/gdbserver | run-as package_name sh -c 'cat > /data/data/package_name/gdb/bin/gdbserver' run-as package_name chmod 700 /data/data/package_name/gdb/bin/gdbserver
am start -D -n package_name/activity_name
on host, run adb jdwp
to get jdwp port of app, then forward tcp ports
adb forward tcp:2345 tcp:2345 adb forward tcp:12345 jdwp:jdwp_port
run on device
getpid() { ps -ef | grep package_name | grep -v grep | tr -s ' ' | cut -f2 -d' '; } pid=$(getpid) && run-as package_name /data/data/package_name/gdb/bin/gdbserver :2345 --attach $pid
gdb
connect to gdbserver
target remote :2345
set library and source path
set solib-absolute-prefix library_path set solib-search-path library_path dir source_path
set breakpoint
b function_name
continue running app
c
attach jdb to trigger app running
jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=12345
or
jdb -attach :12345