ubuntu下安装vscode
1.从官网下载.deb包code.visualstudio.com/Download
没有可视化界面的用wget下载也可以
2.安装
cd 到.deb包的下载路径
sudo dpkg -i code_1.62.0-1635954068_amd64.deb
# 启动vscode
code
# 或者安装好后在桌面点击软件图标进入
界面介绍
菜单栏
- 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文件。
我们主要检查编译器路径,编译标准:
{
"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里面的参数进行命令行的参数拼接。
预定义变量
该文件中有一些预定义的变量:
以下图的目录结构为例:
该工程文件夹名为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…
命令行参数拼接
若我们目前的工程目录如下:
如果我们的配置文件如下,其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
如上图定义了三个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。