在Android真机上使用gdb单步调试

首先需要一台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连接方式连接手机来解决这个问题。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章