美文网首页
Linux下C++命令行调试实战

Linux下C++命令行调试实战

作者: 极客开发者 | 来源:发表于2021-11-23 08:34 被阅读0次

    1. 准备代码

    创建一个C++源代码文件 src/04_debug/sum.cpp,添加以下代码

    #include <iostream>
    using namespace std;
    
    int main(int argc, char const *argv[])
    {
        int N = 100;
        int sum = 0;
        int i = 1;
    
        while(i <= N){
            sum = sum + i;
            i = i + 1;
        }
    
        cout << "sum = " << sum <<endl;
        cout << "The program is over " <<endl;
    
        return 0;
    }
    

    2. 进入调试模式

    在进入调试模式之前,先编译源代码,如下过程。

    普通编译方式

    g++ sum.cpp -o no_g.out
    

    编译出用于调试的可执行文件

    g++ -g sum.cpp -o yes_g.out
    

    使用gdb命令进行调试,如果我们调试 no_g.out ,将会提示一下图错误

    04_01.png

    因为no_g.out这个可执行文件不包含用于调试的信息,输入quit再按回车即可,通过gdb yes_g.out指令执行包含调试信息的可执行文件,看到以下输出

    04_02.png

    此时可以正常进入调试

    3. 调试过程

    直接执行

    run
    

    或者使用简写r,运行结果如下图

    04_03.png

    在第11行打断点

    break 11
    

    运行结果如下图

    04_04.png

    也可以使用简写的方式,在第12行打断点

    b 12
    

    结果如下图

    04_05.png

    使用info break指令或者指令简写i b查看当前的断点,如下图结果

    04_06.png

    使用run指令或者r指令执行程序,此时命中了第11行断点,如下图内容

    04_07.png

    此时可以查看变量的值,如查看i的值,可以使用print i或者p i指令,如下图

    04_08.png

    使用p N 查看N的值,如下图

    04_09.png

    此时程序执行到第11行处,如果我们需要继续执行,输入continue指令并按回车即可,程序将执行到代码的第12行,如下图

    04_11.png

    因为我们是在while循环体内,i的值将不断变化,如果我们需要跟中i值的变化,需要输入display i指令即可,再输入continue指令让程序单步执行,如下图

    04_12.png

    可以观察到,通过循环,又回到了第一个断点,此时i的值已经变成了2。在gdb调试中,如果我们只按回车键,gdb将执行我们最后一次输入的指令,所以我们可以一直按回车键继续让程序单步执行。

    当断点执行都某个位置时,我们想要查看断点附近的代码,可以执行list指令进行查看,如下图

    04_13.png

    相关文章

      网友评论

          本文标题:Linux下C++命令行调试实战

          本文链接:https://www.haomeiwen.com/subject/bkaitrtx.html