C语言VS Code 开发环境搭建

news2024/11/13 10:31:06

文章目录

  • 官方文档
  • 安装拓展
  • 生成c_cpp_properties.json
  • 生成tasks.json
  • 生成launch.json
  • 测试Debug
  • 如何让程序debug完不退出?
  • Windows版本的配置
  • GDB和LLDB的区别

由于之前使用VS Code较少,缺少在VS Code上开发C程序的经验。本篇博文主要记录使用VS Code开发C程序时,环境搭建步骤。

官方文档

主要看下列两个文档即可,建议仔细阅读,二者结合起来看

  1. Mac版VS Code配置C/C++
  2. 关于用户指南中Debug的部分

安装拓展

在左侧Extensions中搜索C/C++,安装即可

生成c_cpp_properties.json

  1. Command + Shift + P,C/C++ : Edit Configuration(UI),Mac下一般使用默认配置即可.在这里插入图片描述
    点击配置页面的c_cpp_properties.json,会在当前文件下生成一个名为.vscode的文件夹,下面会有一个c_cpp_properties.json文件
{
    "configurations": [
        {
            "name": "Mac",
            "includePath": [
                "${workspaceFolder}/**"
            ],
            "defines": [],
            "macFrameworkPath": [
                "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks"
            ],
            "compilerPath": "/usr/bin/clang",
            "cStandard": "c17",
            "cppStandard": "c++17",
            "intelliSenseMode": "macos-clang-x64"
        }
    ],
    "version": 4
}

生成tasks.json

tasks.json是负责Run的。想要更详细的了解task,可参考官方文档

  1. 在C程序源文件,右侧点击Run C/C++ File,选择C/C++: clang在这里插入图片描述
    之后会在.vscode下生成一个名为task.json的文件。官方文档说明
    示例文件
{
    "tasks": [
        {
            "type": "cppbuild",
            // 与launch.json中的preLaunchTask对应,这里要注意,默认生成出的label中带有中文,我这里修改为全英文
            "label": "C/C++: clang++ build active file",
            "command": "/usr/bin/clang",
            "args": [
                "-fcolor-diagnostics",
                "-fansi-escape-codes",
                "-g",
                "${file}",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "调试器生成的任务。"
        }
    ],
    "version": "2.0.0"
}

生成launch.json

launch.json是负责debug的。

  1. 按照官方文档,并没有自动创建launch.json,于是手动创建在这里插入图片描述
    如果不显示C++(GDB/LLDB),那就去C程序源文件,右侧点击Debug C/C++ File,然后再进行上述操作,即可看到C++(GDB/LLDB).点击之后,发现会在.vscode文件夹下创建一个launch.json的文件。不过这个文件里什么配置都没有,于是手动添加配置.下面给出一个示例文件,此示例文件是对官方示例文件的修改
{
    // 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
    // 所有属性:https://code.visualstudio.com/docs/editor/debugging#_launchjson-attributes
    "version": "0.2.0",
    "configurations": [
      {
        "name": "C/C++: clang++ build and debug active file",
        "type": "cppdbg",
        "request": "launch",
        "program": "${fileDirname}/${fileBasenameNoExtension}",
        "args": [],
        "stopAtEntry": false,
        "cwd": "${workspaceFolder}",
        "environment": [],
        // 使用外部终端
        "externalConsole": true,
        "MIMode": "lldb",
        // 和tasks.json中的label对应
        "preLaunchTask": "C/C++: clang++ build active file"
      }
    ]
  }

这里只说明两点,就是上述文件中带注释的部分,

  • debug时如果需要用户输入,则开启外部终端.对应官方文档在这里插入图片描述
  • 要配置preLaunchTask,名字和tasks.json中lable对应在这里插入图片描述

launch.json的所有属性详解见官方文档User Guide > Debugging部分

测试Debug

在程序中打断点,并使用Debug模式启动,发现打开了Mac自动自带的终端,在debug模式下可以在终端输入,可以正常debug程序。

如何让程序debug完不退出?

Stackoverflow上的问题:How to configure VS Code so it won’t close console after program run
在网上找了些答案,基本是以下几种

  • 使用pause
  • 在结束之前搞一个while(true)循环

都不是我想要的,最终发现了评论里的一句话,

Place a breakpoint at the end of main

哈哈哈,就是这个方法最简单,也就是这样在这里插入图片描述
断点打在结尾的}处

Windows版本的配置

  1. 对于C/C++拓展我的配置如图,在这里插入图片描述
    这里我是修改过的,默认不是这样
{
    "configurations": [
        {
            "name": "Win32",
            "includePath": [
                "${workspaceFolder}/**"
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE"
            ],
            "windowsSdkVersion": "10.0.17763.0",
            "compilerPath": "D:/MinGW/bin/gcc.exe",
            "cppStandard": "c++17",
            "intelliSenseMode": "windows-gcc-x86"
        }
    ],
    "version": 4
}
  1. tasks.json配置
{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: g++.exe build active file",
            "command": "D:\\MinGW\\bin\\gcc.exe",
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "调试器生成的任务。"
        }
    ],
    "version": "2.0.0"
}
  1. launch.json配置
{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "C Debug",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": true,
            // 模式是GDB
            "MIMode": "gdb",
            "miDebuggerPath": "D:\\MinGW\\bin\\gdb.exe",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "C/C++: g++.exe build active file",
        }
    ]
}

GDB和LLDB的区别

  • 来自Stackoverflow上的回答: GDB Vs LLDB debuggers.
    一句话总结

So, I would use LLDB while using Clang, use GDB while using GCC compiler as the good combination or pair because LLDB is based on LLVM, whereas GDB is the GNU debugger

  • VS Code官方文档: Debugging with LLDB-MI on macOS

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

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

相关文章

基于Tars高并发IM系统的设计与实现-基础篇2

基于Tars高并发IM系统的设计与实现-基础篇2 三大指标 高可用 分为服务高可用与存储高可用。 服务高可用 服务高可用要做到高可用必须具备两个特点: 负载均衡可横行扩展 当服务的请求量比较高的时候,一台服务不能满足需求,这时候需要多…

sklearn.preprocessing模块介绍

数据预处理 Binarizer: 二值化 用于将数值特征二值化。它将特征值与给定的阈值进行比较,并将特征值转换为布尔值(0 或 1),取决于特征值是否超过阈值 Binarizer(*, threshold0.0, copyTrue)参数: threshold&#xf…

AGI—从GPT和大型语言模型中汲取的经验教训

点击蓝字 关注我们 关注并星标 从此不迷路 计算机视觉研究院 公众号ID|计算机视觉研究院 学习群|扫码在主页获取加入方式 论文地址:https://arxiv.org/pdf/2306.08641.pdf 计算机视觉研究院专栏 Column of Computer Vision Institute 人工智能…

【计算机视觉 | 图像分类】arxiv 计算机视觉关于图像分类的学术速递(6月 29 日论文合集)

文章目录 一、分类|识别相关(12篇)1.1 Pseudo-Bag Mixup Augmentation for Multiple Instance Learning Based Whole Slide Image Classification1.2 Improving Primate Sounds Classification using Binary Presorting for Deep Learning1.3 Challenges of Zero-Shot Recognit…

万物分割SAM家族 越发壮大!HQ-SAM、FastSAM 和 FasterSAM(MobileSAM)

卧剿,6万字!30个方向130篇!CVPR 2023 最全 AIGC 论文!一口气读完。 1、(更高质量)Segment Anything in High Quality 最近的 Segment Anything Model (SAM) 代表了分割模型的一大飞跃,有强大的零…

从零实现深度学习框架——Seq2Seq机器翻译实战

引言 本着“凡我不能创造的,我就不能理解”的思想,本系列文章会基于纯Python以及NumPy从零创建自己的深度学习框架,该框架类似PyTorch能实现自动求导。 💡系列文章完整目录: 👉点此👈 要深入理解…

【你哥电力电子】 THE BUCK-BOOST 升降压斩波电路2

BUCK-BOOST电路2 2023年1月30日 nige in Tongji University #elecEngeneer 上链 文章目录 BUCK-BOOST电路26. CCM非理想能量守恒平均分析6.1 CCM非理想大信号平均模型6.2 CCM等效大信号平均模型6.3 CCM的DC电路模型6.4 CCM的小信号线性电路模型6.5 CCM非理想小信号传递函数6.…

【SaaS】多租户系统设计

文章目录 多租户系统设计一、SaaS 的系统分级二、应用程序必须支持多租户三、数据隔离方案3.1、独立应用独立库3.2、同一个应用程序,每个租户一个库3.3、同一个应用程序,同一个数据库3.4、分片多租户 四、我们的模型选择4.1、开发实践4.2、元数据/配置驱…

vue路由传参+案例(使用mock模拟后端数据)

路由传参 跳转路由时,可以给路由对应的组件内传参 声明式导航 /path?参数名值 /path/值 —需要路由对象提前配置 path: ‘/path/:参数名’ 对应的页面组件接收传递过来的值 $route.query.参数名 $route.params.参数名 router/index.js import Vue from vue // 1. …

解析matlab的audioread()输入输出参数

目录 一、API简介 二、实验 1. matlab 2. C语言 一、API简介 链接如下: 读取音频文件 - MATLAB audioread- MathWorks 中国 也可以浏览最新的英文版API说明: 简单说明如下: 1. 读取wav格式的文件,会自动跳过44个字节的文件…

初识React/JSX/组件/state/受控组件

JSX 推荐使用小括号包裹jsx 使用函数创建组件 使用类创建组件 抽离组件 事件绑定 事件对象 有状态和无状态组件/state 抽离事件处理程序 表单元素 受控组件 多表单优化 非受控组件(了解即可)

vhost-net-原理-初始化流程-数据传输流程-vhost-net后端

文章目录 1.vhost net2.vhost-net的初始化流程vhost net设置vhost dev设置vhost vring设置 3.数据收发流程分析3.1 数据发送3.2 数据接收 4ioventfd和irqfd的通知机制4.1ioeventfdqemu侧kvm侧总体效果 4.2irqfdqemu侧kvm侧总体效果 参考: 1.vhost net 传统的virtio…

ChatGPT Plugins内幕、源码及案例实战(一)

ChatGPT Plugins内幕、源码及案例实战 6.1 ChatGPT Plugins的工作原理 本节主要跟大家谈ChatGPT的插件(Plugins),这个内容非常重要。现在很多企业级的开发,一般都会基于ChatGPT 插件进行一些服务的封装,相当于开发了一个代理(Agent),把一些服务或者API封装在里面,然后…

eclipse编辑器汉化;eclipse安装中文插件

eclipse IDE默认是英文环境,使用起来略微不便,汉化还是很有必要的;下面记录一下安装中文插件的过程: 文章目录 一、 选择安装包地址二、 在eclipse安装中文插件2.1 在线安装2.2 手动下载安装包2.3 导入到eclipse 三、汉化插件介绍 一、 选择安…

实例005 可以拉伸的菜单界面

实例说明 如果管理程序功能菜单非常多,而用户只使用一些常用菜单,这时,可以将主菜单项下的不常用菜单隐藏起来。此种显示方式类似于对菜单进行拉伸。使用时,只需单击展开菜单,即可显示相应菜单功能。运行本例&#xf…

python matplotlib中colorbar的位置设置

colorbar单独设置一个轴对象,再对轴对象进行灵活设置 import numpy as np import matplotlib.pyplot as plt# 创建一个二维随机数组 data np.random.rand(10, 10)# 创建一个图形和一个子图 fig, ax plt.subplots()# 绘制热力图 heatmap ax.imshow(data, cmaphot…

在linux中快速安装Redis数据库

Redis中文网 点击该链接下载最5.0.4版本的Redis的压缩包 使用Xftp工具将Redis安装包上传到linux中 1.将压缩包解压到/opt目录下: tar -zxvf redis-5.0.4.tar.gz 2. 更新yun: sudo yum makecache fast 3.安装gcc: yum -y install gcc 4.安装完成通过输入 : gcc -v …

tiny tool - get_file_path_name_by_drop_file

文章目录 tiny tool - get_file_path_name_by_drop_file概述工程效果收获的知识点vs2022工程, 必须自己设置对话框可以接受文件的风格vs2022建立的工程, 默认是unicode编码, 设置剪贴板数据时, 必须要设置为unicode的格式, 否则剪切板中只有第一个字符工程主要实现END tiny too…

短信压力测试系统,支持自定义接口

短信压力测试系统,支持自定义接口 支持卡密充值,短信压力测试系统,解决一切骚扰电话,教程在压缩包里面 可多个服务器挂脚本分担压力,套了cdn导致无法正常执行脚本可以尝试添加白名单 这边建议使用MySQL方式 同服务器下直接配置…

MySQL生产环境高可用架构实战

分布式技术MongoDB 1. MySQL高可用集群介绍1.1 数据库主从架构与分库分表1.2 MySQL主从同步原理 2. 动手搭建MySQL主从集群2.1 基础环境搭建2.2 安装MySQL服务2.2.1 初始化MySQL2.2.2 启动mysql2.2.3 连接MySQL 2.3 搭建主从集群2.3.1 配置master主服务2.3.2 配置slave从服务主…