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

Linux下vscode配置C++和python编译调试环境

Visual Studio Code (简称 VSCode) 是由微软开发的一款免费、开源、跨平台的代码编辑器。它支持 Windows、macOS 和 Linux 操作系统,并且内置对多种编程语言的支持,包括但不限于 C/C++、Python、JavaScript、TypeScript、Java 和 Go 等。VSCode 主要用于编写、调试和运行代码,并且提供了丰富的扩展支持。

1. vscode配置C++编译和调试环境 

一般vscode配置C++有三个文件,它们分别是:

1.1. c_cpp_properties.json

c_cpp_properties.json 是vscode插件使用的配置文件,主要用于为 C/C++ 项目提供 IntelliSense、编译器路径、包含路径等信息。该文件的主要作用是帮助 VSCode 了解你的开发环境,以便提供更好的代码补全、语法检查和错误提示等功能。

通过Ctrl+Shift+P,输入C++,在下拉菜单中选择“C/C++ Edit configuration”,系统自动会在.vscode目录下创建该文件,供我们设置编译环境。可根据自己需求改动如下配置,一般配置如下:

{"configurations": [{"name": "Linux",                           // 配置的名称, 用于区分平台"includePath": ["${workspaceFolder}/**",               // 工作区中的所有文件"/usr/include",                        // 系统头文件路径"/usr/local/include"                   // 本地安装的软件包的头文件路径],"defines": [],"compilerPath": "/usr/bin/gcc",            // GCC 编译器的路径"cStandard": "c17",                        // 使用 C11 标准"cppStandard": "gnu++14",                  // 使用 gnu++14标准 "intelliSenseMode": "linux-gcc-x64",       // IntelliSense 模式,适用于 linux GCC 64 位"compilerArgs": [                          // 可选的编译器额外参数"-Wall","-Wextra","-Werror"]}],"version": 4                                       // vscode插件的配置文件版本号
}

关键字段解释

name: 配置的名称,通常根据使用的平台命名,如 "Linux"、"Win32"、"MacOS" 等。用于区分不同平台或环境的配置。

includePath: 头文件的搜索路径。在 Linux 下,系统头文件通常位于 /usr/include 和 /usr/local/include,同时还可以添加项目的包含路径。"${workspaceFolder}/**" 表示包含整个工作区的所有文件和子目录。

defines: 预处理器定义,类似于在编译时使用的 -D 选项。可以用于控制条件编译。在 Linux 环境下,常见的预定义宏是 LINUX 或 _LINUX_,有时还会定义调试宏 _DEBUG。

compilerPath: 编译器的路径。在 Linux 下通常是 GCC 编译器,路径可能是 /usr/bin/gcc 或 /usr/bin/clang,具体取决于你使用的编译器。

cStandard: C 语言的标准,可以选择 c89、c99、c11 等。确保选择的标准与项目中使用的编译标准相匹配。

cppStandard: C++ 语言的标准,可以选择 c++11、c++14、c++17、c++20 等。确保与项目的 C++ 标准一致。

intelliSenseMode: IntelliSense 模式,用于指导 VSCode 的智能补全和语法检查。对于 Linux 上的 GCC,可以使用 gcc-x64,如果使用 Clang,则可以选择 clang-x64。

compilerArgs: 可选字段,用于指定编译器的额外参数,例如 -Wall、-Wextra、-Werror 等,用来控制警告和错误的输出。这些参数不会影响实际编译,只用于影响 VSCode 的错误提示和 IntelliSense 行为。

1.2. tasks.json

tasks.json 是vscode用于配置编译任务的文件。在 Linux 下,通过 tasks.json 可以为 C/C++ 项目设置自动编译任务,如调用 gcc 或 g++ 来编译源代码。

通过Ctrl+Shift+p,输入Tasks,选择Tasks: Configure Task,然后按回车键,然后选择Create tasks.json file from template,最后选择GCC (适用于 C/C++),一般配置如下:

{"version": "2.0.0","tasks": [{"label": "build",               // 任务名称"type": "shell",                // 任务类型,使用 shell 命令"command": "/usr/bin/g++",       // 调用的编译器,Linux 下通常是 g++"args": ["-g",                        // 生成调试信息"${workspaceFolder}/src/*.cpp",                   // 编译当前打开的文件"-o",                        // 输出文件"${workspaceFolder}/build/${fileBasenameNoExtension}",  // 输出文件名,与源文件名相同"-I/usr/include/eigen3",    // 包含 Eigen 库头文件的路径(如果使用包管理器安装)"-I/path/to/eigen"          // 如果手动安装 Eigen,则使用该路径],"group": {"kind": "build","isDefault": true            // 设为默认构建任务,使用 Ctrl + Shift + B 可直接运行},"problemMatcher": ["$gcc"],      // 使用 GCC 的问题匹配器来显示编译错误和警告"detail": "Task for building C++ files"  // 任务的详细描述,可选}]
}

关键字解释

1. "version":版本号,指定 tasks.json 的文件格式版本。通常使用 "2.0.0"。

2. "tasks":定义一个或多个任务的数组。每个任务是一个编译或执行过程的配置。

3. "label":任务的名称,可以是任意字符串。这个名称会出现在 VSCode 的任务列表中,用户可以通过名称运行该任务。

4. "type":任务的类型,在 Linux 环境下通常使用 "shell",表示这个任务是在终端中通过 shell 命令执行的。

6. "args":命令的参数,这是一个数组,传递给命令行工具(如 g++)的参数。常见参数包括:
-g:生成调试信息,用于调试时需要。
${file}:表示当前打开的源文件的完整路径。
-o:指定输出文件的名称。
${fileDirname}/${fileBasenameNoExtension}:表示输出文件的路径和名称,生成与源文件同名的可执行文件。

7. "group":任务组,允许将任务分组:
"kind": "build":表明这是一个构建任务,通常用于编译代码。
"isDefault": true:表示这是默认的构建任务,使用 Ctrl + Shift + B 时会自动执行此任务。

8. "problemMatcher":问题匹配器,用于将编译器输出的错误和警告信息与 VSCode 关联。对于 GCC 和 G++ 编译器,通常使用 "$gcc"。这会帮助 VSCode 识别编译错误并在编辑器中标记出来。

9. "detail":任务的详细描述,帮助开发者理解任务的用途。这个字段是可选的。

1.3. launch.json

launch.json 是用于配置调试环境的文件。对于在 Linux 环境下调试 C++ 项目,特别是基于 CMake 的项目,launch.json 文件中需要配置如何使用调试器(通常是 GDB),以及指定调试的可执行文件。

通过Ctrl+Shift+P打开命令行,输入输入 Debug: Add Configuration,选择 C++ (GDB/LLDB) 或 C++ (GDB),VSCode 会生成一个基本的 launch.json 文件,并自动将其存放在工作区的 .vscode 文件夹中。配置如下:

{"version": "0.2.0","configurations": [{"name": "Launch Program",               // 调试配置的名称,任意自定义"type": "cppdbg",                       // 指定 C++ 调试类型"request": "launch",                    // 请求类型,"launch" 表示启动程序"program": "${workspaceFolder}/build/${fileBasenameNoExtension}", // 要调试的可执行文件路径"args": [],                             // 程序启动时传递的参数(可为空)"stopAtEntry": false,                   // 是否在程序入口处暂停"cwd": "${workspaceFolder}",            // 设置工作目录"environment": [],                      // 环境变量配置(可为空)"externalConsole": false,               // 是否使用外部终端"MIMode": "gdb",                        // 使用的调试器模式,通常是 GDB"setupCommands": [                      // 调试器启动时执行的命令{"description": "Enable pretty-printing for gdb","text": "-enable-pretty-printing","ignoreFailures": true}],"miDebuggerPath": "/usr/bin/gdb",       // GDB 调试器路径"preLaunchTask": "CMake Build",         // 调试前执行的任务,一般为构建任务"internalConsoleOptions": "openOnSessionStart"  // 调试控制台的设置}]
}

关键配置参数:

program:要调试的可执行文件的路径。这里你可以使用 ${workspaceFolder} 变量来表示当前工作区的根目录,通常结合 CMake,可执行文件生成在 build 文件夹中,例如 "${workspaceFolder}/build/my_program"。

args:传递给程序的命令行参数。如果你的程序需要接受参数,可以在此设置,例如 ["arg1", "arg2"]。如果没有参数,则保持为空。

至此,你就可以开始在vscode中编写、编译以及调试C++代码了。

1.4. VSCode调试CMakeLists.txt

不过上面是VSCode 直接编译任务,使用自带的任务系统可以直接调用编译器(如 g++ 或 gcc),通过配置 tasks.json 来实现编译,适合于小型项目或没有复杂构建需求的项目。而对于一个大型项目一般采用CMake进行编译,CMake 是一个强大的跨平台构建系统,适合管理复杂的项目,特别是有多个源文件、头文件、外部库依赖的项目。为了在 VSCode 中使用 CMake,需要安装以下插件:CMake Tools。然后修改tasks.json文件如下,其他两个文件不用修改。

{"version": "2.0.0","tasks": [{"label": "CMake Build",               // 任务名称"type": "shell","command": "cmake",                   // 使用 cmake 命令"args": ["--build",                        // 构建参数"${workspaceFolder}/build"        // 构建文件的输出目录],"group": {"kind": "build","isDefault": true                 // 设置为默认构建任务},"problemMatcher": ["$gcc"]},{"label": "CMake Configure",           // 任务名称"type": "shell","command": "cmake","args": ["-S", "${workspaceFolder}",       // 源目录"-B", "${workspaceFolder}/build"  // 构建目录],"group": {"kind": "build","isDefault": false },"problemMatcher": []}]
}

按 Ctrl + Shift + P,然后选择 CMake: Configure。插件会自动检测到 CMakeLists.txt,并在 build 文件夹中生成构建文件。或者直接进入build文件执行camke ..也可以生成构建文件。

CMakeLists.txt文件如下:

cmake_minimum_required(VERSION 3.10)set(CMAKE_BUILD_TYPE Debug)  # 确保在Debug模式下编译# 设置项目名称和语言
project(EigenExample)# 查找 Eigen3
find_package(Eigen3 3.3 REQUIRED NO_MODULE)# 指定要生成的可执行文件
add_executable(eigen_example ./src/cpp_matrix_operation.cpp)# 将 Eigen3 的头文件包含到项目中
target_link_libraries(eigen_example Eigen3::Eigen)

Debug界面如下:

2. vscode配置python编译和调试环境 

调试前安装一下插件Python Debugger。

VSCode调试python代码比较简单,首先打开命令面板:按 Ctrl + Shift + P,输入 Python: Select Interpreter 并选择你要使用的 Python 解释器。如果你使用的是系统 Python 3,通常路径是 /usr/bin/python3。然后按 F5 启动调试器,选择Python Debugger,然后选择Python File,最后就可以直接调试了。

相关文章:

Linux下vscode配置C++和python编译调试环境

Visual Studio Code (简称 VSCode) 是由微软开发的一款免费、开源、跨平台的代码编辑器。它支持 Windows、macOS 和 Linux 操作系统,并且内置对多种编程语言的支持,包括但不限于 C/C、Python、JavaScript、TypeScript、Java 和 Go 等。VSCode 主要用于编…...

OrionX GPU算力池助力AI OCR场景应用

01 AI OCR的历史及概念 OCR(Optical Character Recognition,光学字符识别)是指采用光学的方式将纸质文档中的文字转换成为黑白点阵的图像文件,通过检测暗、亮的模式确定其形状,然后用字符识别方法将形状翻译成计算机文…...

移动端如何实现智能语音交互

智能语音交互(Intelligent Speech Interaction)是基于语音识别、语音合成、自然语言理解等技术,为企业在多种实际应用场景下,赋予产品“能听、会说、懂你”式的智能人机交互功能。适用于智能问答、智能质检、法庭庭审实时记录、实…...

HTTPS:构建安全通信的基石

HTTPS(Hypertext Transfer Protocol Secure),作为互联网上安全通信的基石,通过在HTTP基础上引入SSL/TLS协议层,实现了数据传输的加密,确保了信息的机密性、完整性和真实性。这一过程涉及多个精细设计的步骤…...

OceanBase 企业版OMS 4.2.3的使用

OceanBase 企业版OMS 4.2.3的使用 一、界面说明 1.1 概览 1.2 数据迁移 1.3 数据同步 1.4 数据源管理 1.5 运维监控 1.6 系统管理 二、功能说明 注意: 在数据迁移与数据同步的功能中,如果涉及到增量操作: 1.需要使用sys租户的用…...

STM32中的计时与延时

前言 在裸机开发中,延时作为一种规定循环周期的方式经常被使用,其中尤以HAL库官方提供的HAL_Delay为甚。刚入门的小白可能会觉得既然有官方提供的延时函数,而且精度也还挺好,为什么不用呢?实际上HAL_Delay中有不少坑,而这些也只是HAL库中无数坑的其中一些。想从坑里跳出来…...

[论文笔记] CSFCN

摘要 上下文建模或多级特征融合方法已被证明可以有效提高语义分割性能。 然而,它们并不是专门处理像素上下文不匹配和空间特征不对齐的问题,并且高计算复杂度阻碍了它们在实时场景中的广泛应用。 在这项工作中,我们提出了一种轻量级的上下文…...

mac电脑命令行获取电量

在 macOS 上,有几个命令行工具可以用来获取电量信息,最常用的是 pmset 命令。你可以通过以下方式来查看电池状态和电量信息: 查看电池状态: pmset -g batt这个命令会返回类似下面的输出: Now drawing from Battery Pow…...

2024桥梁科技两江论坛——第二届桥梁工程安全与韧性学术会议

文章目录 一、会议详情二、重要信息三、大会介绍四、出席嘉宾五、征稿主题六、咨询 一、会议详情 二、重要信息 大会官网:https://ais.cn/u/vEbMBz提交检索:EI Compendex、IEEE Xplore、Scopus 三、大会介绍 2024年桥梁科技两江论坛——第二届桥梁工程…...

性能测试-jmeter的控制器(十六)

一、if控制器 需求:使用“用户自定义变量”定义name变量,值可以是“baidu”或“itcast”,使用变量值,控制是否访问对应网站。 1、步骤: 在测试计划中添加用户定义的变量name,取值可为baidu或itcast添加两个http请求&#xff1a…...

直播开播极速流,如何有效接入?

如何有效接入开播极速流?为什么你的直播流速会逐渐下降?开播极速流实际上是我们流速的巅峰阶段,这一阶段的流量构成通常是70%的老粉丝和30%的新粉丝。你是否意识到这一点呢? 在直播开始时,欢迎新老粉丝的互动很重要。比…...

stm32 W25Q数据存储

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、cubemx配置二、keil中文件修改与配置三、几个重要函数的说明四、DMA方式传输(待写)总结 前言 W25Q128 容量为128位 128/8 16 也就…...

深度学习的笔记

1. 从huggingface上仅下载pytorch模型权重和配置文件到服务器 import os import shutil from huggingface_hub import snapshot_download# 直接指定模型和下载路径 model_name openai/clip-vit-base-patch32 download_path /home/xxx/.cache/huggingface/hub/models--anas-a…...

音视频入门基础:AAC专题(8)——FFmpeg源码中计算AAC裸流AVStream的time_base的实现

一、引言 本文讲解FFmpeg源码对AAC裸流行解复用(解封装)时,其AVStream的time_base是怎样被计算出来的。 二、FFmpeg源码中计算AAC裸流AVStream的time_base的实现 FFmpeg对AAC裸流进行解复用(解封装)时,其…...

React 组件的基本使用,useState 状态变量的使用

React 组件 组件是什么 ##### 概念:一个组件就是用户界面的一部分,它可以有自己的逻辑和外观,组件之间可以相互嵌套,也可以多次复用。 在 React,一个组件就是首字母大写的函数,内部存放了组件的逻辑和视…...

空洞骑士 Hollow Knight 攻略

文章目录 Part.I IntroductionPart.II 攻略Chap.I 地图Chap.II 护符Chap.III BOSSChap.IV 魔法 Reference Part.I Introduction 《空洞骑士》是独立团队 Team Cherry 开发的一款 2D 类银河恶魔城动作冒险游戏。本文记录笔者玩此游戏所积累的一些经验。 「在《空洞骑士》中打造…...

CSP-J 算法基础 广度优先搜索BFS

文章目录 前言广度优先搜索是什么广度优先搜索的实现BFS 的具体编程实现举例:广度优先搜索的具体步骤初始状态:步骤 1:加入起点节点 1步骤 2:访问队列中的节点 1,加入其邻居节点 2 和 4步骤 3:访问队列中的…...

What is new in C# 7,8,9,10

目录 Whats new in C# 7 C# 7 in Visual Studio 2017 Out Variables Pattern Matching Tuples (System.ValueTuple) Deconstruct解构 Local Functions Ref Returns and Locals Expression Bodied Members Throw Expressions Generated Async R…...

Sqlserver常用sql

1. 数据库和表操作 创建数据库 CREATE DATABASE DatabaseName; 删除数据库 DROP DATABASE DatabaseName; 创建表 CREATE TABLE TableName ( Column1 DataType1, Column2 DataType2, ... ); 删除表 DROP TABLE TableName; 2. 数据操作 插入数据 INSERT INTO TableNam…...

基于SpringBoot+Vue+MySQL的考研互助交流平台

系统展示 用户前台界面 管理员后台界面 系统背景 本文设计并实现了一个基于SpringBoot、Vue.js和MySQL的考研互助交流平台。该平台旨在为广大考研学子提供一个集资源共享、学习交流、经验分享、心理辅导等功能于一体的综合性在线社区。通过SpringBoot构建高效稳定的后端服务&am…...

chatgpt个人版ssrf漏洞

文章目录 免责申明搜索语法漏洞描述漏洞复现修复建议 免责申明 本文章仅供学习与交流,请勿用于非法用途,均由使用者本人负责,文章作者不为此承担任何责任 搜索语法 fofa title"ChatGPT个人专用版"漏洞描述 该系统是一个开源的…...

如何查看微信聊天记录?四种实用方法查询微信聊天记录,赶快码住!

微信作为我们日常生活中不可或缺的社交工具,记录了大量的聊天内容和重要信息。 当需要查看或恢复微信聊天记录时,很多人可能不知道如何快速、安全地进行操作。 今天,我们就来介绍四种实用的微信聊天记录查询方法,帮助你有效查看微…...

钢材表面缺陷数据集以coco格式做好了数据集的划分,1200张训练集,600张验证集,对应的json文件也在里面

钢材表面缺陷数据集 以coco格式做好了数据集的划分,1200张训练集,600张验证集,对应的json文件也在里面。 钢材表面缺陷检测数据集营销介绍 项目背景: 钢材作为工业生产的重要原材料之一,其表面质量直接影响到成品的性…...

【Lua坑】Lua协程coroutine无法正常完整执行问题

问题:发现Lua协程执行到一半,突然被掐断了一样等到了设定的时间没有正常执行协程后续代码!非必现bug,若发生大概率在高频率使用协程时易触发。 LuaFramework或xLua uLua都自带有协程coroutine,而且基本都使用对象池缓…...

istio中serviceentry结合egressgateway的使用

假设有一个外部服务,外部服务ip为:10.10.102.90,其中32033为v1版本,32034为v2版本。 现在需要把这个服务引入到istio中,并且需要配置所有访问该服务的流量都通过egressgateway转发出去。 serviceentry apiVersion: n…...

使用 Python 实现 Windows 应用图标的便捷生成:一站式 PNG 转 ICO 工具20240918

使用 Python 实现 Windows 应用图标的便捷生成:一站式 PNG 转 ICO 工具 在开发 Windows 桌面应用程序时,图标文件(ICO)的生成是不可忽视的关键步骤。无论是任务栏图标、快捷方式,还是应用程序的主图标,都需…...

编程环境常用命令合集

cmd: python 进入python运行环境 exit()/quit()/ctrlZ 退出环境 rmdir /s venv 删除环境 pip命令&#xff1a; pip list 查看所有库 pip install <库> 安装库 -i <数据源>可指定安装数据源 pip install <库>x.x.x 安装指定版本的库 pip install --upgrade &…...

Qt Creator 集成开发环境 常见问题

1.QtCreator中三种不同编译版本 debug、release、profile 的区别 在 Qt Creator 中&#xff0c;Debug、Release 和 Profile 是三种不同的构建配置&#xff0c;它们主要用于在开发过程中生成不同类型的可执行文件。它们的区别如下&#xff1a; 1.1 Debug&#xff08;调试版本&…...

使用Faiss进行K-Means聚类

&#x1f4dd; 本文需要的前置知识&#xff1a;Faiss的基本使用 目录 1. 源码剖析1.1 参数解释 2. 聚类过程详解2.1 初始化聚类中心2.2 分配步骤&#xff08;Assignment&#xff09;2.3 更新步骤&#xff08;Update&#xff09;2.4 收敛与终止条件 3. GPU 加速3.1 索引结构与 G…...

通过hosts.allow和hosts.deny限制用户登录

1、Hosts.allow和host.deny说明 两个文件是控制远程访问设置的&#xff0c;通过设置这个文件可以允许或者拒绝某个ip或者ip段的客户访问linux的某项服务。如果请求访问的主机名或IP不包含在/etc/hosts.allow中&#xff0c;那么tcpd进程就检查/etc/hosts.deny。看请求访问的主机…...