在Linux系统下使用:man gdb
命令可以查看常见的gdb调试命令
若使用gcc来编译文件,则需要在命令中加上“-g”选项来生成调试信息
1. 常见调试命令
-
启动gdb:
gdb
可执行文件 -
关闭gdb:
quit
-
b / break
:打断点
断点可以为函数名称,可执行文件行号(b sourceFile:lineNumber / b lineNumber) -
l / list
:查看源文件的部分内容 -
r / run
:运行程序 -
info b
:查看断点的情况 -
n / next
:运行一行源程序 -
i r 寄存器/多个寄存器
:查看目前寄存器的值 -
si
:继续执行下一条机器指令 -
s
:继续执行下一条源文件语句 -
x/yxb $rsp
:以16进制形式的字节显示当前栈帧的内容 -
x/zxw $rsp
:以16进制形式的字显示当前栈帧的内容 -
p / print
变量名:显示当前变量的内容(也可以用 p / print &变量名 来打印变量的地址) -
s / step
:进入某一个函数调试
2. gdb使用小技巧
-
shell + shell命令
:可以在gdb中执行shell命令
例如:使用shell cat a.out
:可以执行cat a.out
-
set logging on
:启动日志模式,gdb会在当前文件夹生成 gdb.txt 文件,记录调试过程中显示在屏幕上的信息 -
watch 变量的地址
:观察变量变化的值 -
info watchpoints
:来查看watchpoint
3. 调试core文件
如果程序异常,需要调试文件,想要知道详细的报错信息,就需要调试core文件。
但是在shell下,shell会做一些限制,core文件一般不会默认生成。
如果程序报错,且core文件没有生成,则需要查看当前的限制。
ulimit -a
:显示目前资源限制的设定
ulimit -c unlimited
:解除对生成 core 文件的ulimit限制
gdb 可执行文件 生成的core文件
:调试core文件
4. 调试一个正在运行的程序
-
gcc -g 源文件名
:生成可执行文件; -
./a.out &
:使可执行文件后台运行; -
gdb -p pid
:通过正在运行的程序的pid,调试该程序。
推荐一个pwngdb插件