介绍
gdb命令包含在GNU的gcc开发套件中,是功能强大的程序调试器。GDB中的命令固然很多,但我们只需掌握其中十个左右的命令,就大致可以完成日常的基本的程序调试工作。
使用gdb的前提是程序在编译的时候开启的 -g
选项。
安装
用法
选项
选项 |
描述 |
-cd |
设置工作目录; |
-q |
安静模式,不打印介绍信息和版本信息; |
-d |
添加文件查找路径; |
-x |
从指定文件中执行GDB指令; |
-s |
设置读取的符号表文件。 |
命令
设置输入参数
1 2 3 4
| set args 参数值1 参数值2 ...
set args 1 2
|
显示输入参数
打印代码内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
list 开始,结束 list 函数 list 文件:函数
list 1
list 4,5
list FuncA
list AA.cpp:FuncB
|
设置断点
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
break 行号 break 函数名称 break 脚本名:行号 break 行号或函数if条件
b 4
b funcA
b test.cpp:4
b 45 if i==2
|
删除断点
1 2 3 4
| delete b 行号
delete b 8
|
禁止断点
1 2 3 4
| disable b 行号
disable b 8
|
启用断点
1 2 3 4
| enable b 行号
enbale b 9
|
清除断点
1 2 3 4 5
| clear clear 行号
clear 2
|
打印变量内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
print 变量或表达式等
p 2+3
p sum(3)
p playername
p arr
p arr[1]
p &arr[1]
p *arr@len
|
变量跟踪
跟踪查看某个变量,每次断点停下来都显示它的
1 2 3 4
| display 变量名
display playerName
|
取消变量跟踪
跟踪编号可以通过info display
或display
来显示
1 2 3 4
| undisplay 跟踪编号
undisplay 3
|
修改变量的值
1 2 3 4
| set 变量=value
set number=5
|
值变动监听
监听是断点判断的另一种形式,监听的变量的行需要有断点才生效
1 2 3 4
| watch expr
watch index
|
变量类型检测
1 2 3 4 5 6 7
| whatis 变量名
whatis name
whatis *io
|
变量类型检测
跳出循环
调到下一断点
列出信息
1 2 3 4 5 6 7 8
|
info info break info thread info frame或info f info args info locals
|
下一行
进入函数
退出函数
加载文件
运行程序
1 2 3 4 5 6 7 8 9
|
run [参数]
run
run 3
|
调用栈
查看调用栈某一层
调用栈向上移动层数
调用栈向下移动层数
1 2 3 4 5 6
|
down-silently 层数
down 1
|
进入线程
汇编查看
1 2 3 4
| disassemble 方法
disassemble funcA
|
退出GDB
GDB帮助信息
参数
例子