Linux_mkdir_rm_vi_gdb学习

目录

一、常用命令(mkdir_rm_vi)的复习

二、gdb调试C++程序

  2.1 调试入门--会使用gdb进入调试、layout显式代码窗口、break打断点、netx下一步、run执行代码、print查看变量的值

  2.2使用step进入到子函数内执行,使用watch自动的查看变量值的变化

一、常用命令的复习

二、gdb调试C++程序

2.1 调试入门--会使用gdb进入调试、layout显式代码窗口、break打断点、netx下一步、run执行代码、print查看变量的值

要调试的源代码;

   1 #include <iostream>
   2 using namespace std;
   3 
   4 int sum_factors(int n){
   5     int sum = 0;
   6     for(int i = 1; i <= n; ++i){
   7         if(n % i == 0)
   8             sum += i;
   9     }
  10     return sum;
  11 }
  12 
  13 int main(){
  14     int number = 60;
  15     int sumf = sum_factors(number);
  16     cout<<"Sum of all factors:"<<sumf<<endl;
  17 
  18     return 0;
  19 }

总的调试步骤:

g++ -g main.c -o main
gdb main
layot next             #打开显式你的代码的窗口,以便在调试的时候也可以看到你的代码()
b main                 #在main()函数处打一个断点
run                    #执行代码,并停在你打的断点那里,只写一个r也可
next                   #执行main()函数中的下一个语句,只写一个n也可
p number               #打印main()函数中的number变量的值,写print也可

(1)编译源代码,并添加-g生成符号表

g++ -g main.c -o main

(2)进入gdb调试

 (3)打开显式你的代码的窗口,以便在调试的时候也可以看到你的代码

layot next

 (4)在main()函数处打一个断点,并执行,或者写break也可

b main     #或者写成b 你想要打断点的行号
如b 23      #表示在23行打一个断点

 (5)执行下一步,并打印变量number的值

next         #写成n也可
print number #写成p number也可

 接下来如果执行到第18行也就是return 0;处,如果继续执行next的话,会报错,所以执行完你想看的结果,最后执行run就会重新让你选择是否再次调试程序,如果再次开始调试程序的话,原来打的断点还是有效的。

(6)执行run

 最后使用q退出gdb调试

2.2使用step进入到子函数内执行,使用watch自动的查看变量值的变化

(1)依次执行下面的命令

g++ -g main.c -o main
gdb main
layot next              #打开显式你的代码的窗口,以便在调试的时候也可以看到你的代码()
b main                  #在main()函数处打一个断点
run                     #执行代码,并停在你打的断点那里,只写一个r也可

(2)使用watch自动的查看变量的变化值

watch 查看变量时只要变量的值有变化就停止,执行时不要用n,用c(即continue)执行就会显示 出变量的变化情况。
不要用next,因为next本身就是单步执行,使用c,程序会自动在watch point停住,且必须是run之后再watch变量

执行下面的命令:

watch number    #监视变量number
continue             #一直执行代码,直到监视的变量发生变化

回车之后:

 (3)进入子函数---使用step或s

 

 (4)可以继续设置断点,以跳出for循环

 但是如果使用next的话,则可以一下子就跑到设置断点的第十行处

但是!!!实际上反过来了,使用如果继续使用next的话,是一直执行for循环,然后如果使用continue的话,则一下子跑到设置断点处的第十行那里。

 (5)子函数执行完毕,一直使用next则可以返回主函数继续执行

参考b站中gdb教学视频(外语):https://www.bilibili.com/video/BV1Hj411f7pj?from=search&seid=4008207360523440897

原文地址:https://www.cnblogs.com/YiYA-blog/p/14618881.html