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

news2024/11/16 9:48:29

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,最后就可以直接调试了。

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

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

相关文章

【C语言进阶】动态内存与柔性数组:C语言开发者必须知道的陷阱与技巧

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C语言 “ 登神长阶 ” 🤡往期回顾🤡:C语言动态内存管理 🌹🌹期待您的关注 🌹🌹 ❀C语言动态内存管理 &…

数据结构-链式二叉树-四种遍历

博客主页:【夜泉_ly】 本文专栏:【数据结构】 欢迎点赞👍收藏⭐关注❤️ 数据结构-链式二叉树-四种遍历 1.前言2.前、中、后序遍历2.1前序遍历2.1中、后序遍历 3.层序遍历3.1递归实现3.2队列实现关于在Pop之后为什么还能用tmp访问节点&#x…

Docker学习笔记(四)单主机网络

简介 Docker从容器中抽象除出了底层的主机连接网络,使得程序不用关心运行时的环境。连接到Docker网络的容器将获得唯一的地址,其他连接到同一Docker网络的容器也可以根据该IP找到目标容器并发送消息。   但是容器内运行的软件没法方便的确定主机IP地址…

第二期: 第二节 , 裸机编程 , gpio

1 首先就是 看原理图: 这里有两个 LED 核心板的原理图。 可以看到 是这个脚。 2 然后就是 查看数据手册。 从 数据手册可以看出 ,一共有这么多的 gpio 组, 但是这些 组 是有复用的&#xf…

非常实用的桌面日历 你桌面上的备忘录和提醒工具

在快节奏的现代生活中,时间管理成为了每个人不可或缺的技能。随着数字化时代的到来,我们虽然拥有了智能手机、平板电脑以及各类时间管理应用,但那份传统而温馨的桌面日历,却依然以其独特的魅力,在无数人的工作台上占据…

油耳拿什么清理比较好?好用的无线可视挖耳勺推荐

油耳的朋友通常都是用棉签来掏耳。这种方式是很不安全的。因为使用棉签戳破耳道和棉絮掉落在耳道中而引起感染的新闻不在少数。在使用过程中更加建议大家可视挖耳勺来清理会更好。不仅清晰度得干净而且安全会更高。但最近这几年我发现可视挖耳勺市面上不合格产品很多&#xff0…

澳元/美元价格:进一步上涨看向美联储

澳元/美元在0.6700关口附近波动不定。美元因美国经济数据强劲而重新获得上行动力。接下来,澳大利亚将公布西太平洋领先指数。 美元的再度走强使风险敏感资产承压,澳元/美元周二维持在0.6700关口上方的小幅区间内。尽管美元反弹,澳元仍成功维…

关于STM32项目面试题02:ADC与DAC篇(输入部分NTC、AV:0-5V、AI:4-20mA和DAC的两个引脚)

博客的风格是:答案一定不能在问题的后面,要自己想、自己背;回答都是最精简、最精简、最精简,可能就几个字,你要自己自信的展开。 面试官01:什么是模数转换/ADC?说说模数转换的流程? …

STM32F407 - 01

嵌入式概述 什么是嵌入式?嵌入式是以应用为中心,以计算机技术为基础 硬件可裁剪 适用于对体积 可靠性 功耗 性能等方面有着严格的专用计算机系统 简单来说 除了处理桌面PC和服务器之外所有的控制类设备都是嵌入式. 通用计算机和专用计算机的区别 两者的区别在于技术的发展和…

Python编码系列—Python组合模式:构建灵活的对象组合

🌟🌟 欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中…

质量与数量的博弈!大模型数据建设

质量与数量的博弈!大模型数据建设 前言大模型数据建设 前言 大数据和人工智能(DataAI)技术正以惊人的速度改变着我们的生活和工作方式。大模型数据建设作为人工智能领域的核心组成部分,其重要性日益凸显。 大模型数据建设涉及到海…

硬件工程师笔试面试——电机

目录 18、电机 18.1 基础 电机原理图 电机实物图 18.1.1 概念 18.1.2 电机的一些基本分类和特点 18.2 相关问题 18.2.1 不同类型的电机在实际应用中有哪些具体的优势和劣势 18.2.2 在设计一个电机系统时,我应该如何考虑电机的选型和配置? 18.2.3 对于需要频繁启停的…

【C++篇】C++类与对象深度解析(三):类的默认成员函数详解

文章目录 【C篇】C类与对象深度解析(三)前言4. 运算符重载基本概念4.1 运算符重载的基本概念4.2 重载运算符的规则4.3 成员函数重载运算符4.4 运算符重载的优先级与结合性4.5 运算符重载中的限制与特殊情况4.5.1 不能创建新的操作符4.5.2 无法重载的运算…

TypeScript入门 (一)数据类型与运算符

引言 大家好,我是GISer Liu😁,一名热爱AI技术的GIS开发者。本系列文章是我跟随DataWhale 2024年9月学习赛的TypeScript学习总结文档。希望通过我的知识点总结,能够帮助你更好地学习TypeScript。💕💕&#x…

【漏洞复现】科荣AIO UtilServlet 代码执行漏洞

免责声明: 本文内容旨在提供有关特定漏洞或安全漏洞的信息,以帮助用户更好地了解可能存在的风险。公布此类信息的目的在于促进网络安全意识和技术进步,并非出于任何恶意目的。阅读者应该明白,在利用本文提到的漏洞信息或进行相关测…

学习实践: Procdump获取本地远控信息

看到一篇文章是通过Procdump获取ToDesk远控信息的,于是实操了一下;顺便也测试了一下向日葵远控,发现都是适用的。该方法对于肉鸡提权有一定价值。 1、获取ToDesk远控信息 测试版本:ToDesk v4.7.4.3 测试工具:procdump、…

【Java EE】文件IO

Author:MTingle major:人工智能 --------------------------------------- Build your hopes like a tower! 目录 一、文件是什么? 二、针对文件系统操作的API 1.文件路径,文件名,文件是否存在 2. 创建文件 3.删除文件&#…

推动公平学习与身份归一化的视网膜神经疾病数据集

人工智能咨询培训老师叶梓 转载标明出处 在机器学习领域,公平性(也称为公正性或平等性)是一个日益受到关注的话题,它对于社会的福祉至关重要。然而,目前缺乏专门用于公平学习且包含成像数据的公共医学数据集&#xff…

vs2022配置opencv==4.9.0(C++)

1、下载opencv-windows [opencv4.9.0下载地址](Releases - OpenCV) 下载4.9.0版本: 双击下载好的opencv-4.9.0-windows.exe,选择安装路径: 2、配置opencv环境 (1)添加系统环境变量 此电脑–>右键“属性”–…

小红书治愈插画副业,猛猛涨粉上万+,每天只用5分钟

在这个数字化时代,AI技术正以前所未有的速度改变着我们的生活和工作。特别是在内容创作领域,AI的运用已经催生了一种全新的创作模式。一幅幅温馨可爱的治愈插画如同清流,不仅契合当下年轻人生活的状态,更成为许多人表达生活态度、…