开始
gdb [程序名]
:启动调试。
l
或list
:显示源代码(默认显示10行)。
b main
:在main
函数设置断点。
b section1.cpp:16
:在源文件第16行设置断点。
i b
:查看所有断点信息。
r
或run
:开始执行程序,到断点会停下来。
n
或next
:往下继续执行一行。
p [变量名]
:查看变量的数值。
i locals
:查看所有(执行到目前为止的)局部变量的数值。
c
:继续执行,直到下一个断点。
quit
或q
:退出gdb。
启动调试
gdb --args myProgram 1 2 "3 4"
:设置传入命令行参数,或者进入gdb命令行后输入set args 1 2 "3 4"
再通过run
运行程序,或者直接在进入gdb命令行后运行r 1 2 "3 4"
也可。
gdb attach [PID]
:根据PID调试正在运行中的程序,或gdb --pid [PID]
。
n
或next
:Step-over单步执行。
s
或step
:Step-into单步执行。
finish
:完成当前函数的执行,退出当前函数至原调用函数的下一句。
detach
:退出调试,不影响当前程序执行。
断点
b main.cpp:38
:在指定行号设置断点。
b funcName
:为所有具有相同名字的函数设置断点。
rb [正则表达式]
:为所有满足条件的函数设置断点。
b main.cpp:14 if i==90
:设置条件断点,尤其在循环中有用。
delete
:删除所有断点。
tb main.cpp:14
:设置临时断点,断点只会被命中一次。
info breakpoints
或info break
或i b
:查看所有断点。
i b 2
:查看指定编号断点的信息。
delete 5
:删除指定编号的断点。
disable 1
:禁用指定编号的断点。
enable 1
:启用指定编号的断点。
变量
p argc
、p argv[0]
等:查看指定变量。
i args
或info args
:查看函数参数变量。
set print null-stop
:设置不打印空字符。
set print pretty
:让结构体各成员分行显示。
set print array on
:让数组分行显示。
p sizeof(int)
、p sizeof(long)
、p strlen(name)
、p test.age=25
、p strcpy(test.name, "Some")
:通过p
执行一些简单命令。
p i=8
:修改某变量的值。
内存
x [内存地址]
(如x &test
,也可先通过p &test
获取test
变量的内存地址):查看变量的内存布局。
x /4b &test
:查看test
变量的4个字节的内存布局。例如对int test = 0x12345678
,执行该命令后得到0x7fffffffd5a4: 0x78 0x56 0x34 0x12
,表明当前机器为小端存储(低位地址存储低位字节)。
x /s test_str
:查看字符串。
x /20b &test
(可提前通过p sizeof(test)
获取结构体大小):查看结构体内存分布。
set test.gender=110
:修改内存。
寄存器
info registers
或i registers
:查看所有寄存器。
info all-registers
:更多寄存器。
i r [寄存器名]
(如i r rdx
):查看某个寄存器值。
例如,通过i r rdi
得到rdi 0x555555556004 93824992239620
,假如rdi
存储某字符串指针,则可通过x /s 0x555555556004
或p (char*)0x555555556004
得到其指向的字符串值。
i r pc
或i r rip
:查看PC寄存器。
info line 15
:查看某行对应汇编指令的起始和终止地址。
p $rip=0x555555555217
或set var $rip=0x5555555551ee
:修改PC寄存器值。
代码查看
list
或l
:默认查看当前执行行的前后5行(共10行)。
l -
:往前显示。
l [函数名]
(如l test_c::test_member
、l test.cpp:test_member
):查看函数代码。
l main.cpp:10
:查看指定行号的代码。
set listsize 15
:控制每次显示代码的行数。
l 0
:回到代码开头。
search test
:查找包含test
的符号。
forward-search test
:正向查找,同search
。
reverse-search test
:反向查找。
show directories
:查看源代码搜寻目录。
directory [文件路径]
:添加源文件搜索路径。
栈帧
bt
或backtrace
:查看栈帧。
frame 2
或f 2
或f [栈帧地址]
:切换到某个编号的栈帧。
info f 0
:查看某个编号的栈帧的信息。