「这是我参与11月更文挑战的第19天,活动详情查看:2021最后一次更文挑战」。
常用指令
-
进入调试模式
gdb 可执行文件 -
如果忘了指定调试文件可以使用
file指令指定(gdb) file 文件名 -
使用
quit指令退出调试模式 可简写为q(gdb) q -
使用
start指令开始调试 停在第一行代码处(gdb) start -
使用
step指令进行单步执行 可简写为s(gdb) s #会进入函数内部 -
使用
next执行进行单步执行 可简写为n(gdb) n #不会进入函数内部 -
汇编级别单步执行(上面
n和s为c语言级别单步指令)(gdb) ni #不进入函数内部 (gdb) si #会进入函数内部 -
使用
list指令列出所有源代码 可简写为l(gdb) l -
使用
break指令设置断点位置 可简写为b(gdb) b main #在main函数处打断点 (gdb) b 10 #在第十行位置打断点 (gdb) b test:10 #在test文件的第十行位置打断点 (gdb) b 0x3400a #在0x3400a内存位置打断点 (gdb) b 10 if i==3 #设置条件断点 i等于3时在第十行位置打断点 适用于循环 -
使用
delete+断点编号指令删除断点 可简写为d
(gdb) delete 3 #删除编号为3的断点 清除时GDB不会给出任何提示
- 使用
clear+断点行号指令清除断点
(gdb) clear 3 #清除第三行的断点 清除时GDB会给出提示
-
使用
disable/enable + 断点编号指令冻结或启动断点disable 3,4 #冻结编号为3和4的断点 多个断点使用逗号分隔 -
使用
info break指令查看断点的情况(gdb) info break -
使用
tbreak指令设置临时断点(gdb) tbreak 行号/函数名 #设置临时断点,到达后被自动删除 -
使用
awatch/watch + 变量设置变量读写观察点(gdb) awatch/watch a #当变量a被读出或写入时程序被暂停 (gdb) rwatch a #当变量a被读出时程序被暂停 -
使用
continue指令运行到断点处 可简写为c(gdb) c -
使用
print指令打印变量的值 可简写为p(gdb) p a #打印变量a的值 -
使用x指令打印指定内存地址数据
(gdb) x /6cb 0x804835c #打印地址0x804835c起始的内存内容,连续6个字节,以字符格式输出。 -
使用
run指令运行整个程序 可简写为r(gdb) r #如果此前没有下过断点,则执行完整个程序;如果有断点,则程序暂停在第一个可用断点处 -
使用 call 指令直接运行某个函数
(gdb) call fun #在当前位置执行函数fun -
使用
display指令设置需要跟踪的变量(gdb) display a #跟踪变量a 每次断点到该处就显示该变量的值 -
使用
info display显示当前所有跟踪的情况(gdb) info display -
使用
undisplay+编号指令取消对变量的跟踪(gdb) undisplay 3 #取消对编号为3的跟踪事件 -
使用
set+ 变量指令改变变量的值(gdb) set i=3 #临时设置变量i的值为3 -
使用
set指令设置运行时参数(gdb) set i=3 #临时这只变量i的值为3 -
使用
show指令查看运行时参数(gdb) show i -
使用
finish指令函数结束(gdb) finish -
使用
help指令查看指令使用说明(gdb) help print #查看print指令的解释说明 (gdb) help #查看所有指令 -
使用
info reg指令查看寄存器状态(gdb) info reg -
使用
info stack指令查看堆栈状态(gdb) info stack -
运行shell指令
(gdb) shell ls #运行shell指令ls。 -
其他指令
(gdb) path #可设定程序的运行路径。 (gdb) show paths #查看程序的运行路径。 (gdb) cd #相当于shell的cd命令。 (gdb) pwd #显示当前的所在目录 -
使用
回车重复上一条指令