欢迎访问个人网络日志🌹🌹知行空间🌹🌹
GDB
是 GNU Debugger
的缩写,是GNU软件系统中的标准调试器, 很多类
UNIX系统都可以使用
GDB,
GDB主要用来调试
C/C++编写的程序,也可以用来用来调试
Pascal/FORTRAN/D等语言编写的程序。
GDB最早由犹太裔美国人理查德·马修·斯托曼于
1988年编写,后基于
GNU GPL`协议公开发布。
基本用法
要使用GDB
需要在编译c/c++
程序时带上编译参数-g
,如:
g++ -g foo.cpp -o foo
然后通过gdb
命令来运行程序,如:
gdb [executable]
gdb
命令可以直接运行程序,也可以调试程序,在运行程序时,可以通过run
命令运行程序,在调试程序时,可以通过break
设置断点,然后通过continue
命令运行程序,当程序运行到断点处时,程序会自动停止。常用调试命令如下:
run
运行程序list
查看源码信息break
设置断点disable
禁用断点,如disable break_point1
enable
启用断点,如enable break_point1
delete
删除断点等,如delete breakpoint 1
continue
运行程序,直到遇到断点next
运行下一行step
进入函数内部finish/fin
执行直到当前函数运行结束,如何有返回值会打印返回值backtrace
查看调用栈info args
查看参数info locals
查看局部变量print
打印变量值/寄存器值disassemble
查看源代码相关的汇编代码quit
退出gdb
常用命令示例:
# 查看某个寄存器的值:
p $rdx
# 设置某个寄存器的值
set $rdx = 0x10
# 查看环境变量
show environment [KEY]
查看汇编代码
- 直接输入命令
disassemble
> disassemble
查看当前函数的汇编代码
- 查看特定地址的汇编代码
# x命令是用来查看内存地址的值,i命令是用来查看指令的
# > x/FMT ADDDRESS
> x/i 0xaddress
- 查看特定源文件对应函数的汇编代码
disassemble /m 'source.cpp'::add
Text User Interface(TUI)
使用GDB
的时候可以借助文本用户界面Text User Interface
来提升代码调试的体验。使用TUI
可以同时查看源码,汇编代码和控制调试指令输入。
- 可以通过以下指令启动
gdb
的TUI
模式
> gdb -tui
- 使用
layout next
命令来启动TUI
,同时展示汇编和源码窗口
> layout next
- 使用
layout split
命令来启动TUI
,同时展示汇编和源码窗口
> layout split
- 使用
layout regs
命令来查看寄存器信息
> layout regs
- 使用
layout asm
命令来查看汇编代码
> layout asm
- 使用
layout src
命令来查看源代码
> layout src
窗口切换的快捷键:
- 只显示源代码窗口
Ctrl + X 1
- 打开汇编代码窗口
Ctrl + X 2