1.3 Linux使用IDE:vscode

661 阅读3分钟

ubuntu下安装vscode

1.从官网下载.deb包code.visualstudio.com/Download 1663382272307.png

没有可视化界面的用wget下载也可以

2.安装

cd 到.deb包的下载路径
sudo dpkg -i code_1.62.0-1635954068_amd64.deb

# 启动vscode
code

# 或者安装好后在桌面点击软件图标进入

界面介绍

1663384091072.png

菜单栏

  • File

执行打开文件、文件夹(工程)的相关操作,相关设定(preferences)的配置。

  • Edit、Selection

提供了文本编辑过程中的复制、粘贴、查找、剪切、注释、选择等编辑功能。

  • View

提供了相关面板的切换功能、分屏功能,其中有一个高频使用的工具: Command Palette(快捷键Ctrl+Shift+P),调出相关配置入口。

  • Go

定位相关文件、文件某位置,并且进入。

  • Run

提供编译与调试的相关按钮。

  • Terminal

调出终端、生成tasks.json文件。

侧边栏

包含了

  • Explorer(文件目录浏览器)

展示当前工程文件的目录结构,可进行文件的新建、删除,文件夹的新建和删除等等。

  • Search(搜索区)

  • Run and Debug(运行调试监测区)

在调试过程中监测变量。

  • SourceControl(源代码Git管理)

  • Extensions(插件库)

  • RemoteExplorer(Dokcer容器区)

  • CMake(cmake区)

代码文件编辑区

显示打开的文件,可进行代码、配置文件的编写和修改。

状态栏

显示当的开发语言、Git分支、Cmake状态等、当前光标所在行列等信息。

环境配置

本机安装好c++编译器gcc\g++和调试器gdb。

在vscode的Extensions中安装好三个插件:c/c++、CMake、CMake Tools。

配置文件解析

c_cpp_properties.json

该文件主要定义编译器的相关设置,在vscode中快捷键按Ctrl+Shift+P,调出配置栏,点击c/c++:Edit Configurations(能够弹出该配置的前提是安装了c/c++插件),在工程文件夹的根目录下自动生成一个.vscode文件夹,里面会出现一个c_cpp_properties.json文件。

image.png

image.png

我们主要检查编译器路径,编译标准:

{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**"
            ],
            "defines": [],
            "compilerPath": "/usr/bin/gcc",
            "cStandard": "c11",
            "cppStandard": "c++11",
            "intelliSenseMode": "linux-gcc-x64"
        }
    ],
    "version": 4
}

tasks.json

该文件配置定义的是编译过程中要执行的任务列表,当我们点击vscode右上角的Run C/C++ File时,编译器会读取task里面的任务,对每一个task,读取其args里面的参数进行命令行的参数拼接。

预定义变量

该文件中有一些预定义的变量:

以下图的目录结构为例:

image.png

该工程文件夹名为CmakeTest,路径为D:\CppPrj\CmakeTest

  • ${file}

表示当前打开的文件的文件名称:比如我现在打开了main.cpp,在这里点击了Run C/C++ File按钮,那么该变量表示main.cpp

  • ${fileDirname}

表示当前打开文件所处的目录名称,比如我现在打开了main.cpp,则值为:D:\CppPrj\CmakeTest

  • ${fileBasenameNoExtension}

表示当前打开文件的无后缀名称:main

  • ${workspaceFolder}

表示当前打开工程的目录:D:\CppPrj\CmakeTest

更多预定义变量可参考vscode官网说明: code.visualstudio.com/docs/editor…

命令行参数拼接

若我们目前的工程目录如下:

image.png

如果我们的配置文件如下,其lable标签为“C/C++: g++.exe 生成活动文件”,这个是该任务的名称标识符,可以与launch.json中的参数呼应,command为命令行的开始命令,这里写g++,args里面是一个参数列表,vscode会将其拼接在command(即g++)后面,我们现在激活打开了main.cpp,点击 了Run C/C++ File,vscode则会从tasks.json中提取参数进行命令的拼接,然后在指定的工作目录("cwd": "${workspaceFolder}")输入到shell终端执行编译

 {
     "tasks": [
         {
             "type": "cppbuild",
             "label": "C/C++: g++.exe 生成活动文件",
             "command": "g++",
             "args": [
                 "-fdiagnostics-color=always",
                 "-g",
                 "-Iinclude",
                 "${file}",
                 "src/swap.cpp",
                 "-o",
                 "${fileDirname}/${fileBasenameNoExtension}"
             ],
             "options": {
                 "cwd": "${workspaceFolder}"
             },
             "problemMatcher": [
                 "$gcc"
             ],
             "group": {
                 "kind": "build",
                 "isDefault": true
             },
             "detail": "调试器生成的任务。"
         }
     ],
     "version": "2.0.0"
 }

command + args[0] + args[1] + ...args[-1]

结合上面的预定义变量说明,我们可以得到拼接的命令行:

g++ -fdiagnostics-color=always -g -Iinclude main.cpp src/swap.cpp -o main

若有多个tasks.json

image.png

如上图定义了三个task,最后一个task是将第一个task和第二个task整合了起来,dependsOn参数表明其依赖的task,对应上面两个task的label标签,按照sequence顺序执行。

launch.json

我们按下快捷键F5(Run->Startd Debugging)或者Ctrl+F5(Run->Run Without Debugging)时,Vscode会先读取lanuch.json的信息:

{
    "version": "0.2.0",
    "configurations": [

      {
        "name": "C/C++ Runner: Debug Session",
        "type": "cppdbg",
        "request": "launch",
        "args": [],
        "stopAtEntry": false,
        "externalConsole": true,
        "cwd": "${workspaceFolder}",
        "program": "${workspaceFolder}/main",
        // "program": "${workspaceFolder}/build/fromCmakeBin",
        "MIMode": "gdb",
        "miDebuggerPath": "/usr/bin/gdb",

        // "preLaunchTask": "C/C++: g++.exe 生成活动文件",
        // "preLaunchTask": "DoBuild",
        "setupCommands": [
          {
            "description": "Enable pretty-printing for gdb",
            "text": "-enable-pretty-printing",
            "ignoreFailures": true
          }
        ]
      }
    ]
  }

这里有几个很重要的配置项:

program配置项

这个指的是gdb调试器调试的可执行文件的路径,我们将其定义为工程文件根目录下的main文件,这个文件一定要存在,VSCODE才能启用gdb调试器对其进行调试。

miDebuggerPath配置项

gdb调试器的位置

preLaunchTask配置项

指的是进行调试前要先执行哪个task,对应tasks.json中任务的label标签,该配置项可以不定义,那vscode会直接根据program的配置去找到可调试文件的位置,然后进行调试,如果定义了preLaunchTask,会依据task的名称去tasks.json中寻找对应的task,进行参数拼接后在指定目录下执行命令行。如上图配置,我们定义"preLaunchTask": "DoBuild",意味着vscode在调试前先执行tasks.json中的DoBuild任务:

cd build
cmake ..
make

CMakeLists.txt

cmake_minimum_required(VERSION 3.0)

project(SWAP)

include_directories(${CMAKE_SOURCE_DIR}/include)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
set(CMAKE_BUILD_TYPE Debug)

add_executable(fromCmakeBin main.cpp src/swap.cpp)

即vscode依据launch.json配置文件帮我们使用cmake完成编译(依据CMakeLists.txt的配置,会在build下生成一个fromCmakeBin的可执行文件)同时我们需要修改launch.json的program配置为"program": "${workspaceFolder}/build/fromCmakeBin",这样才能调试到preLaunchTask生成的可执行文件fromCmakeBin。