GDB + GDB server环境安装

  • Post author:
  • Post category:其他



环境:


pc = windows7 x64

phone = Android 4.03


(需要


root


权限)

准备:

gdbserver 可以在


NDK


目录下的


prebuilt


文件夹内找到(如下图所示,在三个


Android-

开头的文件夹中都有


gdbserver


文件夹,里面的


bin


文件就是编译好的


gdbserver


,根据自己




cpu


选择对应的


bin


程序,一般情况是


arm


),找到后可在对应文件的上级目录找到



Windows 下的


gdb


文件在


NDK


目录下的


toolchains


文件下,同样寻找对应的


cpu


的文

件夹如图


一般选择 arm-linux-androideabi –x.x


,然后在其


\prebuilt\windows-x86_64\bin


子目录可

以看到下图所示:

其中


arm-linux-androideabi-gdb.exe


就是我们要找的


gdb


程序(其他


cpu


请找对应的


gdb

可执行程序),这里为了方便使用,我将改目录加入了


path


环境变量,同时将


arm-linux

androideabi-gdb.exe


复制重命名为


gdb




如果找不到,可在


NDK


的根目录下直接搜索


gdb





gdbserver


,从结果中寻找。

第一步:手机端运行


gdbserver

在 cmd


控制台下使用


adb push


命令发送进手机,并使用“


adb shell chmod 777 +gdbserver

路径”的方法给文件可执行的权限,使用


cd


命令进入


gdbserver


所在目录,使用“


./ gdbserver




启动服务(这里有个小技巧,可以将文件


push





/system/bin/


目录,以后执行的时候就不需




cd





gdbserver


所在目录了,不过直接


push


可能


push


不到,需要在


pc





cmd


控制台下

输入“


adb remount


”之后再


push


,如果执行


chmod


时出现权限不够,请在


adb shell


命令

后增加


su


命令即“


adb shell su ….


”,以


root


权限运行,执行前请确认手机已经


root


,否则

可能会报错)

重新打开一个 cmd


窗口使用“


adb forward tcp:23946 tcp:23946


”对模拟器的数据进行转

发(如果在同一局域网内,不需要设置这步,这里设置是设置对于模拟器上数据的端口转发




pc


本地)

gdbserver


的启动命令有两种:

一种是 attach


方式,调试已经启动的程序;

一种是使用 gdbserver


启动程序的方式(这种方式我只会启动


bin


程序);

两种方式的命令格式分别为:

gdbserver :23946 + bin 程序路径

gdbserver :23946 –-attach [PID]

其中:23946





gdbserver


之间有空格请注意,数字代表


listen port


,可自己设置,不过注

意上面的


adb forward


转发也需要同步修改。 (使用 ps


命令可以查看要当前系统运行的进程的


PID


,执行是请检查自己的权限,最好 是 su





root


权限)

第二步:


pc


端运行

运行 gdb,如图所示


依次输入:


set disassemble-next on


(打开这个,显示汇编代码)

set step-mode on (打开单步调试)

target remote 127.0.0.1:23946


(连接上远程调试的


gdbserver


,同理如果是通过

wifi


或者其他网络进行调试,将


ip


修改为手机


ip


即可)

下图为连接上的视图

接下来你就可以使用 b


设置断点,


c


运行至断点,


s





n


进行单步调试


附:


gdb


常用命令:

b *0xFFFF


给这个地址下断点,注意前面的


*





0x

c


继续运行到断点

s


等价于


step into

n


等价于


step over

bt


查看堆栈

info registers


查看寄存器内容

info b


查看断点信息

delete break [n]


删除编号为


n


的断点

disas 0xFFFF,+20


显示这个地址后面


20


行内的汇编指令

kill


终止进程

file


加载文件(用这个命令可以加载符号表)(需要注意的是,这个指令的默认目录为

C:\Users\user


,建议将需要加载的文件复制过来加载)

help


获取帮助信息

ps





gdb


功能强大,不过限于我的水平,使用的不是很好,更多的功能请使用


help


命令、参




gdb


使用手册或者百度学习之。



版权声明:本文为jinganggiao原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。