文章目录
gdb的介绍
什么是gdb?
gdb是linux下的一款调试工具,当代码出现问题时可以用linux调试。
背景认识
我们都知道,程序的发行版本有两种:Debug和Release。
Debug版本的可以被调试,release版本的不能调试。
而Linux下gcc和g++默认形成的可执行程序是release版本的
。
gdb的使用
gcc/g++ 程序文件名 -o 将来生成的可执行程序名 -g
功能:生成可调试文件
gdb调试命令
gdb 可执行程序名
功能:进入调试模式
quit
功能:退出gdb调试模式
list
功能:显示代码
list指令显示的代码是倒序的我们不易查看,下面还有别的指令。
l 0
功能:显示代码
Enter
功能:gdb会记录最近一条命令,如果命令无变化,回车还是执行记录的那条命令。
我们第一次使用l 0显示出红色框的少部分代码,为了代码全显示出来我按了两次Enter键才把代码完全显示出来。
r(run)
功能:开始调试,如果代码没有设置任何断点,程序就会直接运行结束
我们可以看到没有任何停顿,直接输出结果。
b(breakpoint) + n(行号)
功能:在第n行设置断点
info b
功能:查看断点信息
d(delete) + 断点编号
功能:删除断点
n(next)
功能:逐过程调试代码,相当于vs中的F10
p(printf) + 变量名
功能:打印变量内容
s(step)
功能:逐语句调试代码,相当于vs中的F11
我们可以看到当遇到函数是,s可以直接进入函数内部。
bt
功能:查看当前调用堆栈
finish
功能:将当前函数跑完就停下来
我们这里可以看到确实,finish跑完函数就停下来了。
display
功能:常显示
我们之前调试的时候,查看变量信息一直要我们手动的p,那么有没有一种方法可以我们不用每一步都自己手动的p呢?有,就是display
我们可以看到display后,下面的每次n都会出现要display的数据。
undisplay + 编号
功能:取消常显示
上面我们学到了常显示,那么怎么取消呢?就用undisplay
我们可以看到,确实取消了常显示。
until + n(行号)
功能:直接跳转到第n行(如果已经进入函数了,不能直接从函数里面跳转到外面的任何一行,只能执行完本函数,并且停下来)
c(continue)
功能:跳转到下一个断点
disable + 断点编号
功能:关闭断点,但不删除
我们这里也可以看到,当run的时候,是停在19 行编号断点处,而之前的17行编号1的断点确实被关闭了。
enable
功能:打开断点
我们可以看到这次就停在了17行的的编号1断点处
set var
功能:更改变量值
我们看到res的值确实被我们手动更改了。
gdb测试代码
1 #include<stdio.h>
2
3 int AddToTop(int top)
4 {
5 int res = 0;
6 int i = 0;
7 for(i = 0; i < top; i++)
8 {
9 res += i;
10 }
11 return res;
12
13
14 }
15 int main()
16 {
17 int top = 100;
18 int res = 0;
19 res = AddToTop(top);
20 printf("%d\n",res);
21 return 0;
22 }
~