传入命令行参数
gdb program --args arglist
(gdb) set args arglist
(gdb) run arglist
info常用
info args|locals|line
多进程调试
查看系统默认的follow-fork-mode 和 detach-on-fork:
show follow-fork-mode
show detach-on-fork
设置follow-fork-mode 和 detach-on-fork:
set follow-fork-mode [parent|child]
set detach-on-fork [on|off]
运行程序,查询正在调试的进程:
显示GDB调试的所有inferior,GDB会为他们分配ID。其中带有*的进程是正在调试的inferior。( GDB将每一个被调试程序的执行状态记录在一个名为inferior的结构中。一般情况下一个inferior对应一个进程,每个不同的inferior有不同的地址空间。inferior有时候会在进程没有启动的时候就存在。)
info inferiors
切换调试的进程:
inferior <infer number>
断点查看:
info b
使中断失效(断点仍然存在)或有效:
disable <b number>
enable <b number>
删除断点
clear : 删除程序中所有的断点
clear 行号 : 删除这行的断点
clear 函数名 : 删除该函数的断点
delete b_id1 b_id2 ... : 删除指定编号的断点
观察点(WatchPoint):
watch <expr> 变量发生变化时中断
rwatch <expr> 变量被读时中断
awatch <expr> 变量值被读或被写时中断
反汇编:
disassemble /rm
指示显示汇编指令的同时,显示相应的程序源码;/r指示显示十六进制的计算机指令(raw instruction)。
查看寄存器
display/i $pc
(gdb) i r
(gdb) i r a # 查看所有寄存器(包括浮点、多媒体)
(gdb) i r esp
(gdb) i r pc
数组打印
set print array [on|off]
show print array
打开数组显示,打开后当数组显示时,每个元素占一行,如果不打开的话,每个元素则以逗号分隔。这个选项默认是关闭的。
set print elements
show print array
如果你的数组太大了,那么就可以指定一个来指定数据显示的最大长度,当到达这个长度时,GDB就不再往下显示了。如果设置为0,则表示不限制。
GDB环境变量:
2 void main()
3 {
4 int a[10] = {0};
5 a[1] =8;
6 a[2] =4;
7 a[3] = 9;
8
9 }
只用敲回车,重复执行上一条语句,环境变量会自动累加,从而完成逐个输出的功能
![](https://img.haomeiwen.com/i7254437/3571aaa8d591f1d5.png)
gdb的gui调试窗口:
layout [src |asm|split]
ctrl-x a (按住Ctrl+x后松开再按a,以下快捷键操作方式相同)
ctrl-x 1 使TUI只显示一个窗口
ctrl-x 2 使TUI显示两个窗口
layout next 切换上一个视图
fs n 切换激活的窗口
gdbgui
将调试的gui在浏览器中显示
https://gdbgui.com/
安装gdbgui
pip install gdbgui
使用
gdbgui -p 10001 -r "a.out"
-p 10001表示设定的端口是10001,-r 表示是远程remote调试模式(即调试界面不在Linux机上)
网友评论