目录
GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。 对于一名Linux下工作的c/c++程序员,gdb是必不可少的工具。
一、启动gdb
使用vim编辑器编写一个简单的测试程序并保存:
vim hello.c
然后使用gcc将其编译为可执行文件,同时使用-g表示该程序可调试:
gcc -g hello.c -o hello
接下来输入gdb -q + 可执行文件,启动gdb进行调试:
gdb hello
或
gdb -q hello
-q参数可以屏蔽一些gdb版本等相关信息,使得页面看起来干净些(我用了)。至此gdb启动完毕:
二、启动源码
输入list(l)即可查看程序源码:
![](https://i-blog.csdnimg.cn/blog_migrate/afbe5446d93649770244b8b480c12226.png)
三、运行程序
输入run(r)开始运行程序,直到遇到“断点”或者“结束”:
![](https://i-blog.csdnimg.cn/blog_migrate/42902a607eefe81ceddc5e67359e6c29.png)
四、设置断点
输入 break(b)+数字 可以对程序进行断点操作(数字就是设置断点的代码行数)
![](https://i-blog.csdnimg.cn/blog_migrate/71f858f2afb7046aca9fa025e240b0cc.png)
输入 info breakpoints 即可查看断点信息:
Num: 断点编号
Disp:断点执行一次之后是否有效(keep:有效 dis:无效)
Enb: 当前断点是否有效 (y:有效 n:无效)
Address:内存地址
What:位置
下面我们run一下看看是什么效果:
看,卡到了第一个断点处(第五行)
五、单步执行
next:单步执行程序,但是遇到函数时会直接跳过函数,不进入函数
step:单步执行程序,但遇到函数会进入函数
continue:继续执行程序,直到遇到断点或结束
六、查看变量
print + 变量:查看变量值
whatis + 变量:查看变量数据类型
七、退出
输入q即可退出gdb
八、一些其他命令
(1)运行命令
until | 如果你厌倦了在一个循环内单步跟踪,它可以运行程序直到退出循环体 |
until + 行号 | 运行至某行 |
finish | 运行程序,直到当前函数返回完成,并且打印函数返回时的堆栈地址和返回值及参数值等信息 |
call + 行数 + (参数) | 调用程序中可见的函数,并传递参数 如:call gdb_test(66) |
(2)断点
delete + n | 删除第n个断点 |
disable + n | 暂停第n个断点 |
enable + n | 开启第n个断点 |
clear + n | 清除第n行的断点 |
info b ( info breakpoint ) | 显示当前程序的断点设置情况 |
delete breakpoints | 清除所有断点 |
(3)运行信息
where / bt | 当前运行的堆栈列表 |
bt backtrace | 显示当前调用堆栈 |
up / down | 改变堆栈显示的深度 |
set args + 参数 | 指定运行时的参数 |
show args | 查看设置好的参数 |
info program | 查看程序是否在运行,以及进程号被暂停的原因 |