开始
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:查看某个编号的栈帧的信息。

