[C/C++][VsCode]使用VsCode在Linux上开发和Vscode在线调试

目录

    • 0. 前言
    • 1. win10上搭建环境Linux环境
    • 2.编写makefile
    • 3.怎么在线调试
    • 结语

0. 前言

在开发中,可以一边开发一边调试,这样可以大大的减少bug;但是正常来说一个大点的项目,是不太可能单步调试的,因为一般都是用make或者CMake,甚至安卓中的Android.bp来编译;因此检查调试程序,仅能通过编译后,烧录到目标板子上或者搭建好的环境上,根据Log信息来调试,这样确实有点麻烦,但不得不这样啊,现在就是这个状态,每次都要去在线测试,然后分析Log,非常耗时。
由于这个原因,去研究了哈怎么在VScode上调试,其中也遇到很多的坑,就这么突如其来的想法,又花了我一天。

1. win10上搭建环境Linux环境

该环境搭建很简单,不用装虚拟机,目前win10上在商城有ubuntu系统,安装一个就好了,然后使用Vscode下载一个WLS的插件即可连接使用;可以参考:嵌入式中常见的问题锦集 Good tool solutions -> 在win10上学习Linux 这一节
在这里插入图片描述

2.编写makefile

这篇中的makefile来至 Linux 编译c/c++ makefile 通用脚本 & shell 工具脚本, Make 通用模板 -> c.升级b版本的,简化了生成.o链接文件的过程,现在仅需要添加头文件和源文件即可编译ok(主要区别就是建立的一个文件夹@mkdir -p $(dir $@)), 整个code 文件下载 本博客使用的是C++_test工程, 工程c_test中没有去在线调试

3.怎么在线调试

  1. 先安装C/C++的插件,然后准备一个工程,里面有makefile(这个没有也没关系,但是怎么去编译就要去捣鼓tasks.josn)
    a.插件截图如下
    在这里插入图片描述
    b.项目结构
    在这里插入图片描述
    c.用于编译工程的makefile, 这个是一个通用的模板,非常好用,这里也贴上
#Makefile
# 编译器
CC = g++# 编译选项
CFLAGS = -Wall# 目标文件
TARGET = mp
OBJ_DIR = build# 源文件
# 当前目录下的.cpp
SRCS = $(wildcard *.cpp)
#其他目录下的.cpp
SRCS += $(wildcard module1/src/*.cpp)
SRCS += $(wildcard module2/src/*.cpp)# 头文件
CFLAGS += -Imodule1/inc
CFLAGS += -Imodule2/inc
CFLAGS += -g# LIB
#CFLAGS += -Lpath/to/lib1
#CFLAGS += -Lpath/to/lib2#添加宏定义
#CFLAGS += -DANDROID_OS# 对象文件和中间文件目录
OBJS = $(SRCS:%.cpp=$(OBJ_DIR)/%.o)# 默认构建目标
all: $(TARGET)# 生成可执行文件 
$(TARGET): $(OBJS)$(CC) -o $@ $^# 生成根目录下的目标文件
$(OBJ_DIR)/%.o: %.cpp | $(OBJ_DIR)
#创建文件夹很关键,不然会fail@mkdir -p $(dir $@)$(CC) $(CFLAGS) -c $< -o $@# 创建中间文件目录
$(OBJ_DIR):mkdir -p $(OBJ_DIR)# 清理生成的文件
clean:rm -rf $(OBJ_DIR) $(TARGET)
  1. 编写VsCode中的tasks.josn文件, 该文件用于编译工程

a.默认生成的tasks.josn

  • 在安装了插件后,Ctrl+shift+p, 然后搜索task, 选Tasks: Configure Default Build Task创建tasks.josn,或者在菜单栏Terminal->Configure Default Build Task
  • 生成的文件如下,
    第一个框表示使用的工具位置,可以是gcc,g++,或者make, Cmake
    第二个框表示参数,最终执行会是类似这样子:/usr/bin/gcc -fdiagnostics-color=always -g /home/xxx/doc/c++_test/main.cpp -o /home/xxx/doc/c++_test/main
  • 如果不使用makefile, 就需要将args中填写很多内容,主要就是g++ 后面跟的参数,源文件,头文件,等,但是路径一定的正确不然会 报错
    在这里插入图片描述

b.最终我们用来build make 方式的tasks.json

  • 其实很简单哈,如下的文件就是去执行: make
  • 如果需要带参数的话,可以在args中添加,比如加一个宏 “args”: [“-D__ANDROID__”],
{"version": "2.0.0","tasks": [{"type": "cppbuild","label": "C/C++: g++ build active file","command": "make","args": [],"options": {"cwd": "${workspaceFolder}"},"problemMatcher": ["$gcc"],"group": {"kind": "build","isDefault": true},"detail": "compiler: /usr/bin/g++"}]
}
  1. 编写VsCode中的luanch.josn文件,该文件用于调试工程
  • 怎么生成
    ctrl+shfit+p 搜debug选Add Debug Configuration

  • 需要修改的有3点:
    第一是"program": “${workspaceFolder}/mp”,, 指定运行的程序
    第二是确认GDB已经安装,并已添加到环境变量中,不然需要指定路径:“MIMode”: “gdb”,
    第三是要保证"preLaunchTask": “C/C++: g++ build active file” 和tasks.json中的"label": “C/C++: g++ build active file”,类容一样,不然luanch.josn中配置的运行程序不会生效
    需要注意的是:如果需要调试,则在makefile中需要加上 -g 的标志, 不然没办法调试

{// Use IntelliSense to learn about possible attributes.// Hover to view descriptions of existing attributes.// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387"version": "0.2.0","configurations": [{"name": "(C++ gdb) Launch","type": "cppdbg","request": "launch","program": "${workspaceFolder}/mp","args": [],"stopAtEntry": false,"cwd": "${workspaceFolder}","environment": [],"externalConsole": false,"MIMode": "gdb","setupCommands": [{"description": "Enable pretty-printing for gdb","text": "-enable-pretty-printing","ignoreFailures": true},{"description": "Set Disassembly Flavor to Intel","text": "-gdb-set disassembly-flavor intel","ignoreFailures": true}],"preLaunchTask": "C/C++: g++ build active file"}]
}

结语

对于刚接触vscode的同学来说,在上面开发还是有点难度的,稍不注意,配置错了,就一堆问题,只能说还是集成的IDE好用,但是没有VScode方便,便捷。

最后贴两个保姆级教程和技巧,怎么在vscode 编写C/C++, 可以参考
VSCode上搭建C/C++开发环境(vscode配置c/c++环境)Windows系统—保姆级教程
VSCODE的使用技巧(嵌入式开发)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java打印金字塔paremid和空心金字塔

java打印金字塔 首先确定每行打印几个空格&#xff0c;在确定每行打印几个* 设总层数为layers&#xff0c;当前层数为i。 则每行打印空格数layers-i&#xff0c;每行打印星号数2*i-1 import java.util.Scanner;public class Paremid{public static void main(String[] args) …

基于Pico和MicroPython点亮ws2812彩色灯带

基于Pico和MicroPython点亮ws2812彩色灯带 文章目录 基于Pico和MicroPython点亮ws2812彩色灯带IntroductionPracticeConclusion Introduction 点亮发光的LED灯是简单有趣的实验&#xff0c;点亮多个ws2812小灯串联起来的灯带&#xff0c;可对多个彩色小灯进行编程&#xff0c;…

夏季城市内涝防治:视频汇聚系统智能AI技术助力城市自然灾害应急管理

据新闻报道&#xff0c;6月19日至20日&#xff0c;受强降雨影响&#xff0c;广西桂林城区及周边等地出现今年入汛以来持续时间最长、累计降水量最大、影响范围最广、致灾风险最高的暴雨天气过程&#xff0c;导致桂林市区多处发生洪水内涝&#xff0c;房屋被淹、道路受阻、人员被…

ES全文检索支持繁简和IK分词检索

ES全文检索支持繁简和IK分词检索 1. 前言2. 引入繁简转换插件analysis-stconvert2.1 下载已有作者编译后的包文件2.2 下载源码进行编译2.3 复制解压插件到es安装目录的plugins文件夹下 3. 引入ik分词器插件3.1 已有作者编译后的包文件3.2 只有源代码的版本3.3 安装ik分词插件 4…

【pytorch04】创建Tensor

numpy中的数据创建tensor 数据已经在numpy中了&#xff0c;将numpy中的数据转到tensor中来&#xff0c;因为我们将使用tensor在GPU上进行加速运算 从NUMPY导入的FLOAT其实是DOUBLE类型 list中的数据创建tensor FloatTensor()和大写的Tensor()接收的是shape&#xff08;即数据的…

JAVA学习过程中遇到的问题

前言 记录学习过程中遇见的各种问题。希望对你有帮助。 目录 前言 1、新建maven项目时&#xff0c;archetype项目骨架加载慢 2、maven的pop.xml添加依赖项无法检测到 3、java: 无效的目标发行版: 20 4、idea添加maven依赖太慢 5、CTRLCV复制粘贴太慢 6、Swagger写接口文…

SD卡无法读取?数据恢复全攻略!

SD卡无法读取问题描述 在日常使用电子设备时&#xff0c;我们有时会遇到SD卡无法读取的情况。当插入SD卡后&#xff0c;设备可能无法识别或访问其中的数据&#xff0c;这给我们带来了诸多不便。SD卡无法读取&#xff0c;意味着存储在卡中的重要文件、照片和视频等资料可能面临…

数学建模---包汤圆问题引发的思考

1.前言 &#xff08;1&#xff09;虽然我学习这个数学建模已经很长一段时间了&#xff0c;但是我认为自己始终是一个门外汉&#xff0c;只是学习了一下这个基本的建模软件使用方法&#xff0c;以及一些相关的知识&#xff0c;虽然参加了一次这个电工杯的比赛&#xff0c;但是这…

1.Triangle

一、你好&#xff0c;三角形 在OpenGL中&#xff0c;任何事物都在3D空间中&#xff0c;而屏幕和窗口却是2D像素数组&#xff0c;这导致OpenGL的大部分工作都是关于把3D坐标转变为适应你屏幕的2D像素。 3D坐标转为2D坐标的处理过程是由OpenGL的图形渲染管线&#xff08;Graphi…

稳态与敏态业务阶段

稳态业务就是比如你登录学校的图书馆教务处这些业务系统 用户数量和数据基本上不会发生太大的变化 业务系统的更新也不是很频繁&#xff0c;比较方便资源的采购 敏态业务就是比如我开发一个应用上线了&#xff0c;我不知道有多少用户和数量&#xff0c;无法预估 这就没办法…

2小时极速入门 TypeScript-慕课网 笔记

TS文档&#xff1a;https://www.tslang.cn/docs/handbook/modules.html 一&#xff0c;什么是TS 注:Typescript无法在浏览器中运行 ,所以需要编译器,将TS转变为JS 问&#xff1a;TS运行这么麻烦&#xff0c;为什么还要有TS&#xff1f; 答&#xff1a;TS强类型 1&#xff0c;规…

LDO VS buck的优缺点对比:LDO(效率低但稳压);DCDC(降压buck,效率高但噪声大)

LDO&#xff1a; Low Dropout Regulator&#xff0c;低压差稳压器 低压差&#xff1a;输入电压与输出电压的差值低&#xff1b; 稳压&#xff1a;当输入电压VIN在正常范围内时&#xff0c;输出电压VOUT都稳定在一个我们需要的固定电压值&#xff1b; 举个栗子&#xff0c;输…

Opencv学习项目4——pyzbar

Pyzbar介绍 Pyzbar 是一个用于解码条形码和二维码的 Python 库。它是基于 ZBar 条形码扫描器库的 Python 绑定&#xff0c;支持多种条形码格式&#xff0c;包括 QR 码、EAN-13、UPC-A、Code 128 等。 Pyzbar 的主要功能 解码多种类型的条形码和二维码&#xff1a;支持包括 QR 码…

Python: HexBinDecOct

因为&#xff1a; f0b1001110# 十进制 int()a0*2**01*2**11*2**21*2**30*2**40*2**51*2**6print(a)# 八进制 oct()print(78/8,78%8)# 110 001 001 8 116print(1*2**00*2**10*2**2,1*2**00*2**10*2**2,0*2**01*2**11*2**2)#十六进制 hex()#0 100 1110 16 4Eprint(sixteenFoo(0*…

汉语拼音字母表 (声母表和韵母表)

汉语拼音字母表 [声母表和韵母表] 1. 汉语拼音声母表2. 汉语拼音韵母表References 1. 汉语拼音声母表 声母是韵母前的辅音&#xff0c;与韵母一起构成一个完整的音节。 辅音是发声时&#xff0c;气流在口腔中受到各种阻碍所产生的声音&#xff0c;发音的过程即是气流受阻和克…

2024年6月大众点评成都餐饮店铺POI分析22万家

2024年6月大众点评成都餐饮店铺POI共有221002家 店铺POI点位示例&#xff1a; 店铺id CACuqlcUQApLA7Ki 店铺名称 峨眉山豆腐脑(百吉街店) 十分制服务评分 7.3 十分制环境评分 7.5 十分制划算评分 7.1 人均价格 18 评价数量 38 店铺地址 百吉街86号1层 大类 美食 中类…

关于edge浏览器注册Kaggle不显示验证部分的问题

使用edge注册kaggle没有显示验证的部分导致无法完成注册 法一 谷歌大法好&#xff0c;使用谷歌注册就么有问题&#xff0c;然鹅需要魔法上网。 法二 使用 edge的Header Editor的插件 收到邮件后填写即可 参考博客&#xff1a; Kaggle平台注册弹不出验证码怎么办&#…

聊聊Vue中的Router(路由)

Vue构造的是一个单页面应用 在 Vue 中&#xff0c;router&#xff08;路由&#xff09;用于定义应用的不同页面路径和组件之间的映射关系&#xff0c;通过路由从而实现页面的切换和导航功能 vue中所有的xxx.vue文件&#xff0c;都是路由组件&#xff0c;这些组件都会被vue读取…

【物联网】NB-IoT

目录 一、什么是NBIOT 二、NB-IoT的特点 三、NBIOT的工作状态 四、移远NB-IoT模块及AT指令 一、什么是NBIOT NB-IoT&#xff08;Narrow Band Internet of Things&#xff09;窄带物联网&#xff0c;构建于蜂窝网络&#xff0c;所占用的带宽很窄&#xff0c;只需约180KHz&am…

基于NURBS曲线的数据拟合算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1NURBS曲线基础 4.2 数据拟合原理 5.完整程序 1.程序功能描述 基于NURBS曲线的数据拟合算法,非均匀有理B样条&#xff08;Non-Uniform Rational B-Splines&#xff0c;简称NURBS&#xf…