vscode配置C/C++环境,用GDB调试简单程序分享

vscode配置C/C++环境

关于vscode如何可以配置C/C++环境,大家可以移步vscode配置C/C++环境,这是D32762大佬的调试教学,对于新手小白非常友好。

文章背景和简介

本篇文章主要记录vscoed配置C/C++环境后,用GDB调试一些简单代码的实操。

调试代码展示

调试代码为一个简单的C语言程序text.c,包含数组遍历,函数调用和数值计算,可以用来演示GDB的断点设置,单步执行,变量查看和函数追踪等核心调试功能。

复制代码
#include<stdio.h>

int add(int a,int b){
int result=a+b;
return result;
}

int main(){
int arr[5]={10,20,30,40,50};
int i,sum=0;
for(i=0;i<5;i++){
    sum+=arr[i];
}

printf("Sum:%d\n",sum);

int x=10,y=20;
int z=add(x,y);
printf("add(%d,%d)=%d\n",x,y,z);
return 0;

}

使用GDB前准备工作

首先,将代码输入到vscode,编写完成后,在终端编写 gcc -g -o test test.c 将text.c文件进行编译为text.exe文件。

复制代码
gcc -g -o test test.c

其次,在终端编写 gdb ./test.exe 打开GDB调试工具。

复制代码
 gdb ./test.exe 

初步结果如下图所示,其中下图的gdb已经成功启动,现在它停在了一个信息提示页面。这是正常结果,我们需要按enter键继续下一步就可以。

gdb正式调试过程

现在让我们正式进入gdb调试过程。

BREAK

首先在main设置断点,下图数字8前面就为设置的断点。

复制代码
gdb brask

为什么要设置断点?他的作用是什么?

**断点就是让程序在指定的位置暂停下来,**设置断点可以方便程序出错时寻找错误,同时也可以观察程序的运行过程。

查看源代码:list

设置好断点后,输入 list可以查看当前断点附近的源代码:

复制代码
gdb list

可以看到类似这样的输出:


运行程序:run

输入 run开始运行程序,它会停在第一个断点处:

复制代码
(gdb) run

输出示例:


单步执行:next

输入 next 可以一行一行地执行代码,不进入函数内部

复制代码
gdb next    

程序只执行下一行代码,多次使用会在下一行的基础上继续执行下一行。

输出示例


查看变量:print

输入 print 变量名可以查看当前变量的值:

复制代码
gdb print i      
gdb print sum   

这里我选择调试i,sum两个变量的值。其中,变量i因为在调试的第9行没有赋予初值,被系统自动分配垃圾值。

示例输出:


继续运行:continue

如果程序停在了断点,让它继续运行到下一个断点程序结束

复制代码
gdb continue

程序会继续执行,直到遇到下一个断点或正常结束。


退出 GDB:quit

调试完成后,输入 quit退出 GDB:

复制代码
gdb quit

示例输出

GDB 调试命令总结表

命令 作用
break main 设置断点
run 运行程序 停在断点
list 查看代码 显示代码
next 单步执行 执行一行
print 查看变量 显示值
continue 继续运行 程序结束
quit 退出 GDB ✅正常退出
相关推荐
C++ 老炮儿的技术栈8 小时前
我们在设计tcp协议时,要传一个字符串过去,报文:头十长度十内容,是否要把‘\0‘也填入,长度是否包含‘\0‘
开发语言·数据结构·c++·mfc·c
传奇开心果编程8 小时前
【Rust入门练中学】第2课:变量、可变性与常量
开发语言·学习·rust
zr想努力9 小时前
从0开始配置Perforce4环境
开发语言
幸运小圣10 小时前
PointerEvent 常用属性与事件整理【JavaScript】
开发语言·javascript·ecmascript
长谷深风11110 小时前
评测AI Agent:三种裁判各司其职
java·大数据·开发语言·人工智能·ai agent
边境悍匪10 小时前
蜗牛学苑 Java 智能体学习 Day42|项目周开发技术汇总 1 思维导图复盘
java·开发语言·spring boot·学习·spring
君顾111 小时前
本地托管机构管理源码实战:需求拆解、数据建模与多端部署
java·开发语言·托管
传奇开心果编程12 小时前
【Rust入门练中学】 第3课:数据类型
开发语言·学习·rust
泡泡鱼(敲代码中)13 小时前
MySQL 学习笔记:DCL、函数与约束 —— 安全、效率、完整性的三板斧
开发语言·笔记·sql·学习·mysql·gitee
I_belong_to_jesus13 小时前
std::unique_ptr成员函数用法
c++