sudo yum install -y gdb(如果安装过了,就不必再安装)
学习之前我们先写一段用于测试的代码,你也可以边看边敲
1 #include
2 #include
3
4 int AddToVal(int from,int to)
5 {
6 int i = 0;
7 int result = 0;
8 for(i = from;i <= to;++i)
9 {
10 result += i;
11 }
12
13 return result;
14 }
15
16 void print(int sum)
17 {
18 long long time_t = time(NULL);
19 printf("sum = %d time = %lld\n",sum,time_t);
20 }
21
22 int main()
23 {
24 int sum = AddToVal(0,100);
25
26 print(sum);
27 return 0;
28 }
gcc -g mytest.c(或者gcc -g mytest.c -o mytest用来指定生成的可执行程序)。切记:务必带上-g选项,表明生成的是debug模式,如果不带,生成的是release模式。release模式中没有调试信息。
指令: gdb + 可执行程序(进入调试状态)
调试代码是在命令行上调试的,所以我们要看到代码才能更好的完成调试工作,那么如何查看代码呢?
指令: l + 行号
注意:如果要继续往下面看,直接enter就好
指令: r(run调试运行)
注意:如果执行r指令,但程序中间也没有断点,那么程序就直接跑完了。如果有断点,就执行到断点处。
指令: c(跳到下一个断点处)
在VS下面我们经常设置断点,来加快调试效率,那么,在gdb关于断点都有哪些知识呢?
指令: b + 行号(设置断点)
指令: info b(查看断点)
指令: d + 编号(去掉断点)
指令: n (逐过程执行)
指令: s (逐语句执行)
指令: p (查看变量)
但是用p查看变量具有临时性,一但执行其他指令,查看的临时变量就消失了。所以我们一般用display来查看变量,来达到常显示。
指令: display + 变量
指令:undisplay + 变量(取消常显示)
指令: until + 行号(跳转到指定行)
注意:这个跳转具有一些特殊性质,它会首先跳出当前函数,所以跳转到了24行
指令: bt (查看调用堆栈)