Before you even start building Android, Google’s instructions tell you to source the build/envsetup.sh
shell script.
This script exports a number of environment variables (that’s why you have to source it), mostly setting the PATH
to your different toolchains and to your output directories.
It also defines a number of shell functions. Among them some functions are advertised, like the well-know lunch
, that is used to configure to some extent the build system, or the grepping functions, but some are not, like pid
, which uses adb
to get the PID of a process running on the device.
Among the latter, one seems pretty useful: gdbclient
. What gdbclient
does is obviously gdb related but in fact it does more than that.
First, you run it by doing gdbclient <binary>:<port> <process_name>
Then it sets up adb
with the forward
command so that you use it as a transport layer to your device, while it appears as (in that case) opened TCP sockets both on your machine and on the device.
Then, it attaches a gdbserver
to the process you gave as the third argument on the device.
Finally, it launches your cross-gdb on your workstation, loads the debugging symbols from the file passed as first argument, and sets up a remote debugging session. All of that through USB!
This is definitely useful, and I can’t say why Google doesn’t advertise it more, but hey, it’s there!