运行命令
run | 简写r 运行程序,当遇到断点后,程序会在断点处停止运行 |
continue | 简写c 运行到下一个断点 |
next | 简写n 执行下一步语句,不进入函数 |
step | 简写s 执行下一步语句 |
until | 运行到循环体结束 |
until 行数 | 运行到某一行 |
call 函数(参数) | 调用函数 |
finish | 运行程序,直到当前函数完成返回,并打印函数返回时的堆栈地址和返回值及参数值等信息。 |
断点设定(b / break)
断点 | |
---|---|
info b | 查看所有断点 |
b n | 打断点在n行 |
b filename:n | 断点在某个文件的n行 |
b n if a > b | 条件断点设置 |
b func | 函数断点设置 |
b filename:fun | 某个文件中的某个函数断点 |
delete 断点号n | 删除断点 |
enable 断点号n | 使能断点n |
disable 断点好n | 暂停断点n |
clear 行号n | 清除第n行断点 |
delete breakpoints | 清除所有断点 |
显示源码
list | 简记为 l ,其作用就是列出程序的源代码,默认每次显示10行。 |
list 行号 | 将显示当前文件以“行号”为中心的前后10行代码 |
list 函数 | 将显示“函数名”所在函数的源代码 |
list | 不带参数,将接着上一次 list 命令的,输出下边的内容。 |
打印表达式(p/print)
p 变量名 | 打印变量名 |
p 表达式 | 打印表达式结果 |
p fun(2) | 将以整数2作为fun函数的参数 |
p fun(变量名) | 将变量作为fun函数的参数 |
p $寄存器名 | 输出当前寄存器地址和值 |
display 表达式 | 在单步调试后都显示表达式的值 |
watch 表达式 | 设置一个监视点,一旦被监视的“表达式”的值改变,gdb将强行终止正在被调试的程序 |
whatis 变量/函数 | 查看变量或函数的类型 |
info funciton 函数名 | 查看函数 |
info funcitons | 查看所有函数 |
info locals | 查看当前函数所有的堆栈页的所有变量 |
查看运行信息
bt/where | 当前运行的堆栈列表 |
bt backtrace | 显示当前调用堆栈 |
up/down | 改变堆栈显示的深度 |
show args | 查看设置好的参数 |
info program | 来查看程序的是否在运行,进程号,被暂停的原因。 |
set args 参数 | 指定运行时的参数 |
分割窗口
layout src | 显示源代码窗口 |
layout asm | 显示饭反汇编窗口 |
layout regs | 显示源代码/反汇编和CPU寄存器窗口 |
layout split | 显示源代码和反汇编窗口 |
info
i register | 打印寄存器的值(不包括浮点型) |
i all-registers | 打印所有寄存器的值 |
i registers 寄存器名/ p $eax | 输出当前寄存器的值 |
set var $pc=0x08050949 | 设置pc寄存器的值为0x08050949 |
info line 行号 | 打印出当前行号的其实地址 |
disassemble main | 打印main函数的汇编代码 |
查看内存中的值
x/ <n/f/u> <addr>
n | 显示长度,从当前地址向后显示几个地址(units)的值。 |
f | 显示的格式(format)。默认使用十六进制格式。 |
u | 表示(the unit size) 从当前地址往后每一个值的位宽大小。如果不指定的话,GDB默认是4个bytes。当我们指定了位宽长度后,GDB会从指内存定的内存地址开始,读写指定位宽大小 |
显示格式(format)
x | (hexadecimal)按十六进制格式显示变量。 |
d | (signed decimal)按十进制格式显示变量。 |
u | (unsigned decimal)按十进制格式显示无符号整型。 |
o | (octal)按八进制格式显示变量。 |
t | (binary)按二进制格式显示变量。 |
a | (address)按十六进制格式显示地址,并显示距离前继符号的偏移量(offset)。常用于定位未知地址(变量)。 |
c | (character)按字符格式显示变量。 |
f | (floating)按浮点数格式显示变量。 |
位宽大小(the unit size)
b | 表示单字节 |
h | 表示双字节 |
w | 表示四字 节 |
g | 表示八字节 |