在 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 进入调试模式。
利用断点和调试器功能,快速定位和解决代码中的问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/18893.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

视频智能分析软件LiteAIServer视频智能分析平台玩手机打电话检测算法

在当今这个数字化时代,智能手机已成为我们日常生活中不可或缺的一部分,它极大地便利了我们的沟通与学习。然而,当这份便利被不恰当地带入到如工厂生产线、仓库以及学校课堂等特定的工作和学习环境中时,其潜在的危害便逐渐显露出来…

【pytest】pytest注解使用指南

前言:在 pytest 测试框架中,注解(通常称为装饰器)用于为测试函数、类或方法提供额外的信息或元数据。这些装饰器可以影响测试的执行方式、报告方式以及测试的组织结构。pytest 提供了多种内置的装饰器,以及通过插件扩展…

gvim添加至右键、永久修改配置、放大缩小快捷键、ctrl + c ctrl +v 直接复制粘贴、右键和还原以前版本(V)冲突

一、将 vim 添加至右键 进入安装目录找到 vim91\install.exe 管理员权限执行 Install will do for you:1 Install .bat files to use Vim at the command line:2 Overwrite C:\Windows\vim.bat3 Overwrite C:\Windows\gvim.bat4 Overwrite C:\Windows\evim.bat…

一文快速掌握 AMD FPGA IO约束 常用电平标准

FPGA开发中IO约束是不可缺少的部分,正确的电平约束是确保电路稳定运行与兼容性的关键所在。 今天分享下IO约束中常用的电平标准,帮助大家快速理解和掌握。 一、 LVTTL系列 LVTTL全称为Low - Voltage Transistor - Transistor Logic,是一种…

没钱买KEGG怎么办?REACTOME开源通路更强大

之前搜集免费生物AI插图时简单提到了通路数据库Reactome(https://reactome.org/), 那些精美的生物插图只能算是该数据库附赠的小礼品,他的主要功能还是作为一个开源的通路数据库,为相关领域的研究者提供直观的可视化生…

ubuntu显示管理器_显示导航栏

ubuntu文件管理器_显示导航栏 一、原始状态: 二、显示导航栏状态: 三、原始状态--->导航栏状态: 1、打开dconf编辑器,直接在搜索栏搜索 dconf-editor ------如果没有安装,直接按流程安装即可。 2、进入目录:org …

mysql的基本操作

各位小伙伴们,好久不见呀!最近博主也因为个人原因,实在是太忙,才导致最近的文章一直没更新,当然本篇文章依旧还是会给大家带来知识点的学习,闲话少叙,我们直接进入正题。 目录 数据库的创建及使…

6.k8s:devops

目录 一、devOps整体流程 二、GitLab 1.GitLab安装 2.GitLab基础配置 (1)修改密码 (2)不启用头像 (3)关闭用户注册功能 (4)开启webhook外部访问 (5) 设置中文 3.配置secret 4.卸载gitlab 三、Harbor镜像仓库 1.安装好docker-compose 2.安装harbor 四、…

分布式IO模块:智慧楼宇的“智慧眼”与“智慧手”

在现代化的城市建设中,智慧楼宇作为一种集成了建筑、通信、计算机和控制等多方面技术的新型建筑,正逐渐成为城市发展的重要驱动力。智慧楼宇不仅提高了建筑设备的运行效率,降低了能源消耗,还提供了更加安全、舒适和便捷的生活办公…

【IOS】编译缓存错误Library/Caches/com.apple.mobile.installd.staging

项目场景: xcode ios 问题描述 Failed to load Info.plist from bundle at path /var/installd/Library/Caches/com.apple.mobile.installd.staging/temp.FOrCHQ/extracted/xxxxModule_Example.app/Frameworks/Foundation.framework; Extra info about "/va…

ARM64环境部署EFK8.15.3收集K8S集群容器日志

环境规划 主机IP系统部署方式ES版本CPU架构用户名密码192.168.1.225Ubuntu 22.04.4 LTSdockerelasticsearch:8.15.3ARM64elasticllodyi4TMmZD ES集群部署 创建持久化目录(所有节点) mkdir -p /data/es/{data,certs,logs,plugins} mkdir -p /data/es/certs/{ca,es01}服务器…

【网络安全 | 漏洞挖掘】邮件HTML注入

文章目录 Email 中的 HTML 注入漏洞漏洞挖掘过程1. 初步信息收集2. 发现私信功能3. 功能测试与 HTML 注入测试测试步骤请求拦截与分析4. 绕过防护机制绕过方法附加威胁漏洞影响漏洞报告与奖励Email 中的 HTML 注入漏洞 HTML 注入是一种安全漏洞,攻击者通过将任意 HTML 标签注…

《自定义类型:结构体》

1. 结构体回顾 结构体的声明 结构体的初始化 2. 结构体的特殊声明 匿名结构体: 不需要给结构体名字,但是只能使用一次。 这里的使用一次具体是什么意思呢,刚开始学的时候我自己的理解是有误解的,下面给出一个示例; 注意&…

基于Java Springboot城市公交运营管理系统

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA/eclipse 数据…

【杂谈】无人机测绘技术知识

无人机测绘技术知识 随着科技技术的不断进步和低空经济的快速推进,无人机技术已经从最初的军事侦察、航拍娱乐,逐渐深入到各个行业领域,其中无人机测绘技术(航空摄影测量)更是凭借其高效、精准、灵活的特性&#xff0…

数据挖掘复习

一、绪论 分类 classify 上涨或跌 回归 regression 描述具体数值 分类模型评估 1.混淆(误差)矩阵 confusion matrix 2.ROC曲线 receiver operating characteristic curve 接收者操作特征曲线 3.AUC面积 area under curve ROC曲线下与坐标轴围成的面…

Springboot 整合 Java DL4J 构建股票预测系统

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,…

ZSTD 内存泄漏问题

优质博文:IT-BLOG-CN Zstandard(简称zstd)是一种无损压缩算法,由Facebook开发并开源。它旨在提供高压缩比和高解压速度的平衡,适用于多种数据压缩需求。 特点 【1】高压缩比: zstd能够在保持较高压缩比的…

嵌入式硬件电子电路设计(五)LDO低压差线性稳压器全面详解

引言: LDO(Low Dropout Regulator,低压差线性稳压器)是一种常用的电源管理组件,用于提供稳定的输出电压,同时允许较小的输入电压与输出电压之间的差值。LDO广泛应用于各种电子设备中,特别是在对…

D3基础:绘制圆形、椭圆形、多边形、线、路径、矩形

在D3.js中&#xff0c;可以通过SVG元素来创建各种几何图形。以下是D3.js中常用的几何图形及其简单的创建方法&#xff1a; 1. 圆形 (Circle) 圆形是最基本的形状之一&#xff0c;可以通过<circle>标签来创建。 <!DOCTYPE html> <html> <head><met…