首先需要一台root过的手机,安装好BusyBox工具箱,并连接到一台配置好adb的调试PC。
1、从NDK的prebuild目录下找到对应手机平台的gdbserver,上传到手机,运行游戏,然后运行
gdbserver --attach 127.0.0.1:6666 PID
其中,PID是要调试的应用的进程ID,可以用top或ps命令查看。6666是要使用的端口号,手机上任意一个没有被使用的端口都可以。该命令运行之后,被附加的应用会暂停,等待gdb客户端的连接。
2、打开Windows命令行工具,forward一下端口, adb forward tcp:6666 tcp:6666
3、windows命令行中运行对应手机平台的gdb工具,通常放在NDK的工具链目录里面,例如:
toolchains\arm-linux-androideabi-4.9\prebuilt\windows-x86_64\bin\arm-linux-androideabi-gdb.exe
4、在gdb中指定远程目标,运行 target remote:6666
这时候就应该能附加到目标进程上了,然后就像用gdb调试本地程序一样调试就行了。
附加说明:
有时候会有SIGPWR或者SIGXCPU这样的信号会让gdb断下来,可以用如下的命令忽略掉这些信号:
handle SIGPWR noprint
handle SIGXCPU noprint
另外,手机上的sdcard目录是不能给文件添加可执行权限的,需要把gdbserver拷贝到内部存储目录。但是内部存储根目录默认是只读挂载的,使用如下的命令用读写方式重新挂在即可:
mount -o rw,remount /
有时候,用数据线连接手机比较容易碰到线而让连接断开,可以使用adb的TCP连接方式连接手机来解决这个问题。