gdb调试

传入命令行参数

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 

断点查看:

info b

使中断失效(断点仍然存在)或有效:

disable 
enable 

删除断点

clear : 删除程序中所有的断点

clear 行号 : 删除这行的断点

clear 函数名 : 删除该函数的断点

delete b_id1 b_id2 ... : 删除指定编号的断点

观察点(WatchPoint):

watch     变量发生变化时中断
rwatch     变量被读时中断
awatch      变量值被读或被写时中断

反汇编:

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       }

只用敲回车,重复执行上一条语句,环境变量会自动累加,从而完成逐个输出的功能


image.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机上)

你可能感兴趣的:(gdb调试)