当前位置: 首页 > news >正文

在 Ubuntu 中用 VSCode 配置 C 语言项目的编译与调试(详解教程)

目录

    • 一、准备工作
    • 二、配置 VSCode 的编译任务
    • 三、配置 VSCode 的调试任务
    • 四、编译与调试流程
    • 五、常见问题排查
    • 六、总结

在 C 语言开发过程中,调试与编译是不可缺少的环节,而 VSCode(Visual Studio Code)作为一个强大且轻量级的编辑器,结合 gcc 和 gdb,可以高效地完成 C 语言项目的开发和调试工作。本文将详细介绍如何在 Ubuntu 环境下,用 VSCode 配置一个 C 项目的编译和调试环境。

一、准备工作

1. 安装必要工具
在开始之前,确保你的系统已经安装了以下工具:

VSCode:通过终端安装:

sudo apt update
sudo apt install code

GCC 和 GDB:用于编译和调试 C 程序。

sudo apt install build-essential gdb

VSCode C/C++ 插件:打开 VSCode,点击左侧扩展(Extensions)图标,搜索 C/C++,安装由 Microsoft 提供的插件。

2. 准备项目文件
将你的 C 项目文件放在一个独立的目录中。例如:

~/AGC/test_AGC/

项目文件结构示例如下:

test_AGC/
├── agc.c
├── agc.h
├── dr_wav.h
├── WebRTC_AGC.c
└── build/  # 用于存放编译输出文件

二、配置 VSCode 的编译任务

为了方便管理项目,我们需要在 VSCode 中配置编译任务。这些任务会自动调用 gcc,将源代码编译成可执行文件,并输出到指定目录中。

1. 创建 tasks.json
在项目的根目录下新建 .vscode/tasks.json 文件,内容如下:

{"version": "2.0.0","tasks": [{"type": "cppbuild","label": "C/C++: gcc build Debug version","command": "/usr/bin/gcc","args": ["-fdiagnostics-color=always","-g","${file}","-o","${workspaceFolder}/build/Debug/outDebug"],"options": {"cwd": "${workspaceFolder}"},"problemMatcher": ["$gcc"],"group": {"kind": "build","isDefault": true},"detail": "Generated build task for Debug version","dependsOn": ["createBuildDir"]},{"label": "createBuildDir","type": "shell","command": "mkdir","args": ["-p", "${workspaceFolder}/build/Debug"],"problemMatcher": []}]
}

2. 配置说明
label:任务名称,可用于在任务面板中调用。
command:指定编译器路径,这里是 /usr/bin/gcc。
args:
-g:生成包含调试信息的可执行文件。
${file}:表示当前正在编辑的 C 文件。
-o:指定输出文件路径,这里是 build/Debug/outDebug。
dependsOn:确保在编译前自动创建目标目录 build/Debug。
cwd:设置当前工作目录为项目的根目录 ${workspaceFolder}。
3. 执行编译任务
按下 Ctrl+Shift+B 或通过菜单选择 Terminal -> Run Build Task。如果任务配置正确,将会生成编译输出文件:

~/AGC/test_AGC/build/Debug/outDebug

三、配置 VSCode 的调试任务

有了编译任务之后,我们需要为项目配置调试器,以便单步运行代码、设置断点、查看变量等。

1. 创建 launch.json
在项目的 .vscode 文件夹中,创建一个名为 launch.json 的文件,内容如下:

{"version": "0.2.0","configurations": [{"name": "C/C++ Runner: Debug Session","type": "cppdbg","request": "launch","args": [],"stopAtEntry": false,"externalConsole": false,"cwd": "${workspaceFolder}","program": "${workspaceFolder}/build/Debug/outDebug","MIMode": "gdb","miDebuggerPath": "/usr/bin/gdb","setupCommands": [{"description": "Enable pretty-printing for gdb","text": "-enable-pretty-printing","ignoreFailures": true}]}]
}

2. 配置说明
program:指定调试目标文件路径,需与编译输出路径一致。
cwd:调试时的工作目录,通常设置为项目根目录。
MIMode:调试模式,使用 gdb。
miDebuggerPath:gdb 的路径,通常为 /usr/bin/gdb。

四、编译与调试流程

1. 执行编译任务
在 VSCode 中,按 Ctrl+Shift+B 执行编译任务,生成可执行文件 build/Debug/outDebug。如果一切正常,在终端中运行以下命令可以看到生成的文件:

ls ~/AGC/test_AGC/build/Debug/

输出示例:

outDebug

2. 设置断点
打开 agc.c 文件,点击行号左侧的空白区域,添加断点(红点会显示出来)。

3. 启动调试
按下 F5 或点击调试按钮(虫子图标),选择 C/C++ Runner: Debug Session。调试器将启动,并在断点处暂停。

五、常见问题排查

1. 编译失败:找不到输出目录
如果遇到错误:

/usr/bin/ld: cannot open output file ...: No such file or directory

这是因为目标目录不存在。确保 tasks.json 中已包含 mkdir 命令,或手动运行以下命令:

mkdir -p ~/AGC/test_AGC/build/Debug

2. 中文路径问题
如果路径中有中文字符(如 桌面),可能会导致工具解析失败。建议将项目移动到全英文路径下,如:

mkdir -p ~/projects
mv ~/AGC/test_AGC ~/projects/

3. 调试器无法启动
如果调试器提示:

launch: program ... does not exist

请确保 launch.json 中的 program 路径与实际编译输出路径一致。

六、总结

通过以上配置,VSCode 已经成为一个强大的 C 语言开发环境。无论是编译还是调试,都可以在一个统一的界面中完成。以下是完整的操作流程回顾:

在 VSCode 中配置 tasks.json,自动编译 C 代码。
在 VSCode 中配置 launch.json,设置调试器。
使用 Ctrl+Shift+B 进行编译,按 F5 进入调试模式。
利用断点和调试器功能,快速定位和解决代码中的问题。

相关文章:

在 Ubuntu 中用 VSCode 配置 C 语言项目的编译与调试(详解教程)

目录 一、准备工作二、配置 VSCode 的编译任务三、配置 VSCode 的调试任务四、编译与调试流程五、常见问题排查六、总结 在 C 语言开发过程中,调试与编译是不可缺少的环节,而 VSCode(Visual Studio Code)作为一个强大且轻量级的编…...

MATLAB绘制克莱因瓶

MATLAB绘制克莱因瓶 clc;close all;clear all;warning off;% clear all rand(seed, 100); randn(seed, 100); format long g;% Parameters u_range linspace(0, 2*pi, 100); v_range linspace(0, pi, 50); [U, V] meshgrid(u_range, v_range);% Parametric equations for t…...

HTML5实现趣味飞船捡金币小游戏(附源码)

文章目录 1.设计来源1.1 主界面1.2 游戏中界面1.2 飞船边界框效果 2.效果和源码2.1 动态效果2.2 源代码 源码下载 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details/143799554 HTML5实现趣味飞船捡金币小游戏(附源码)&…...

Excel表数学于三角函数、统计函数

一、数学与三角函数 函数说明ABS返回数值的绝对值ACOS反余弦函数ACOSH反双曲余弦函数ASIN反正弦函数ASINH反双曲正弦函数ATAN反正切函数ATAN2以 x、y 坐标返回反正切值ATANH反双曲正切函数CEILING向上舍入(指定倍数的整数)COMBIN组合公式COS余弦函数COS…...

小试银河麒麟系统OCR软件

0 前言 今天在国产电脑上办公,需要从一些PDF文件中复制文字内容,但是这些PDF文件是图片转换生成的,不支持文字选择和复制,除了手工输入,我们还可以使用OCR。 1 什么是OCR OCR (Optical Character Recogni…...

Dubbo RPC线程模型

消费端线程模型,提供者端线程模型 消费端线程模型 对 2.7.5 版本之前的 Dubbo 应用,尤其是一些消费端应用,当面临需要消费大量服务且并发数比较大的大流量场景时(典型如网关类场景),经常会出现消费端线程…...

三角波生成函数

% 设置时间范围和采样频率 t 0:0.01:2; % 时间从0到2秒,步长为0.01秒% 定义频率 f 和角频率 theta f 5; % 频率为5Hz theta 2 * pi * f * t;% 初始化输出向量 y zeros(size(t));% 根据给定的公式计算 y for k 1:fy y (-1)^(k-1)*(2 /(k * pi)) * sin(k * the…...

使用Python实现对接Hadoop集群(通过Hive)并提供API接口

安装必要的库 首先,确保已经安装了以下库: pip install flask pip install pyhive代码实现 1. app.py(主应用文件) from flask import Flask, jsonify, request, abort from pyhive import hive import re from datetime impo…...

Qt学习笔记(四)多线程

系列文章目录 Qt开发笔记(一)Qt的基础知识及环境编译(泰山派) Qt学习笔记(二)Qt 信号与槽 Qt学习笔记(三)网络编程 Qt学习笔记(四)多线程 文章目录 系列文章…...

java的小数计算如何保证精度不丢失

前言 学java的肯定都知道,要保证小数运算精度不丢失我们得用BigDecimal对象。这篇文章就分析一下为什么用浮点数会造成精度丢失?BigDecimal是怎么解决精度丢失问题的?下面我们一起看看吧! 浮点数的表示 浮点数在计算机中通常采用 IEEE 75…...

分布式----Ceph应用(下)

目录 创建 Ceph 对象存储系统 RGW 接口 1、对象存储概念 2、创建 RGW 接口 //在管理节点创建一个 RGW 守护进程(生产环境下此进程一般需要高可用,后续介绍) //开启 httphttps ,更改监听端口 //创建 RadosGW 账户 //S3 接口…...

小鹏汽车嵌入式面试题及参考答案

static 变量放在哪个段中? 在 C 和 C++ 等编程语言中,static 变量根据其定义的位置不同放置的段也不同。对于全局的静态变量(在函数体外定义的静态变量),它会被放在数据段(.data 段或者.bss 段)。如果这个静态变量被初始化了非零值,那么它会被放在.data 段,这个段存储…...

qt5半成品飞机大战小游戏

最近在学Qt,心血来潮做了个飞机大战小游戏,由于一些资源比较难找,就做了个半成品。效果图如下: 目前已做功能:人物飞机的自由移动,子弹的发射,子弹与敌机的物体碰撞,碰撞特效。 缺少功能&#x…...

一文速学---红黑树

文章目录 一、红黑树简介二、 红黑树特性三、红黑树插入3.1 红黑树为空3.2 父节点为黑色3.3 父节点为红色3.3.1 父亲和叔叔都是红色3.3.2 父节点为红色,叔叔节点为黑色3.3.2.1 父节点在左节点,插入节点在父亲左节点3.3.2.2 父节点在左节点,插…...

【graphics】图形绘制 C++

众所周知,周知所众,图形绘制对于竞赛学僧毫无用处,所以这个文章,专门对相关人员教学(成长中的码农、高中僧、大学僧)。 他人经验教学参考https://blog.csdn.net/qq_46107892/article/details/133386358?o…...

全志科技嵌入式面试题及参考答案

C 语言的编译过程是怎样的? C 语言的编译过程主要包括以下几个阶段。 首先是预处理阶段。在这个阶段,预处理器会处理以 “#” 开头的预处理指令。比如 #include 指令会把指定的头文件内容插入到当前的源文件中,这使得我们可以在程序中使用标准库函数或者自定义头文件中的声明…...

html 图片转svg 并使用svg路径来裁剪html元素

1.png转svg 工具地址: Vectorizer – 免费图像矢量化 打开svg图片,复制其中的path中的d标签的路径 查看生成的svg路径是否正确 在线SVG路径预览工具 - UU在线工具 2.在html中使用svg路径 <svg xmlns"http://www.w3.org/2000/svg" width"318px" height…...

Wallpaper壁纸制作学习记录01

导入图像 打开wallpaper软件&#xff0c;找到下方的播放列表&#xff0c;选择壁纸编辑器。 弹出下列界面&#xff0c;在创建壁纸处可以选择图片拖入。 在开始导入任何图像之前&#xff0c;请首先确保主背景图像表示实际屏幕分辨率。展示示例图像是 1920 x 1080&#xff0c;这…...

【深度学习】wsl-ubuntu深度学习基本配置

配置pip镜像源 这里注意一点&#xff0c;你换了源之后就最好不要开代理了&#xff0c;要不然搞不好下载失败&#xff0c;pip和conda都是 ## 配置中科大镜像 pip config set global.index-url https://mirrors.ustc.edu.cn/pypi/web/simple# 配置阿里源 pip config set global…...

1000+ 道 Java面试题及答案整理(2024最新版)

作为 Java 程序员&#xff0c;选择学习什么样的技术&#xff1f;什么技术该不该学&#xff1f;去招聘网站上搜一搜、看看岗位要求就十分清楚了&#xff0c;自己具备的技术和能力&#xff0c;直接影响到你工作选择范围和能不能面试成功。 如果想进大厂&#xff0c;那就需要在 Ja…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上&#xff0c;所以报错&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本&#xff0c;cu、torch、cp 的版本一定要对…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit&#xff08;传感器服务&#xff09;# 前言 在运动类应用中&#xff0c;运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据&#xff0c;如配速、距离、卡路里消耗等&#xff0c;用户可以更清晰…...