• 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

  • 相关阅读:
    linux如何查看ip地址
    mybais-plus整合springboot自动代码生成。
    org.springframework.beans.factory.UnsatisfiedDependencyException 问题
    springboot中使用AOP做访问请求日志
    springboot集成swagger
    springboot中的跨域问题
    spring中的ApplicationListener
    spring中的BeanDefinitionRegistryPostProcessor
    spring中的BeanFactoryPostProcessor
    servlet中ServletContainerInitializer
  • 原文地址:https://www.cnblogs.com/YiYA-blog/p/14618881.html
Copyright © 2020-2023  润新知