前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux下C++命令行调试实战

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

作者头像
极客开发者
发布2022-01-18 14:27:37
3.1K0
发布2022-01-18 14:27:37
举报
文章被收录于专栏:极客开发者

本文是该系列第四篇文章,如果你没有阅读过之前的内容,可以通过以下链接进行阅读

1. Linux中编译C++代码的g++工具,以及g++的常用操作指令

2. Linux下C++命令行编译示例

3. Linux下的GDB调试器常用指令

1. 准备代码

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

代码语言:javascript
复制
#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. 进入调试模式

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

普通编译方式

代码语言:javascript
复制
g++ sum.cpp -o no_g.out

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

代码语言:javascript
复制
g++ -g sum.cpp -o yes_g.out

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

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

此时可以正常进入调试

3. 调试过程

直接执行

代码语言:javascript
复制
run

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

在第11行打断点

代码语言:javascript
复制
break 11

运行结果如下图

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

代码语言:javascript
复制
b 12

结果如下图

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

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

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

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

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

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

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-11-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 极客开发者up 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 准备代码
  • 2. 进入调试模式
  • 3. 调试过程
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档