系统:Arch Linux
vscode 版本:1.28.2
gcc 版本:8.2.1
gdb 版本:8.2
C/C++插件 版本:0.20.1
本文所说方法在上述系统以及软件中试验成功,对其他系统不一定完全适用但有一定的借鉴价值,部分系统中的设置本文中也会提及。如有疑问,欢迎评论。
本文部分内容参考vscode官方文档,vscode github,C/C++插件github
MacOS Windows 以及部分Linux可以直接上vscode官网下载安装包
Linux还可以使用包管理工具(archlinux的pacman或yay,Ubuntu的apt)安装
打开vscode后界面如下图所示,选择左侧状态栏最后一个(就那个像四个正方形的)或者按快捷键(Ctrl+Shift+X)即可进入插件界面。
修改语言为中文,当然了,也可以直接用英文,这样碰到什么问题直接Google很方便
一个几乎是写C/C++必备的插件,提供智能提示、语法查错、debugger功能,本文围绕它展开
一个能编译运行绝大多数语言的插件,省去了敲命令的过程,可以做到一键编译运行大部分代码(环境配好的前提下)
安装过程与前两个类似
懂得如何在终端下使用gcc的,可以直接在vscode中打开终端(快捷键Ctrl+`),用gcc进行编译
首先在当前目录下新建一个文件夹.vscode,这个文件夹主要就是存你对vscode在当前文件夹的配置。
在.vscode中新建一个文件tasks.json,然后将以下内容复制进tasks.json。(windows用户有一处需要修改(有许多感叹号的地方))
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{//配置任务 compile cpp file with O2
"label": "compile cpp file with O2",//任务名称
"type": "shell",//运行在终端
"group": {//任务所属执行组
"kind": "build",
/*
可选
build:生成组
test:测试组
由于这里要编译代码 所以选择生成组
*/
"isDefault": true
//是否时默认生成任务,选择是,这样可以直接使用快捷键Ctrl+Shift+B执行任务
},
"command": "g++",//执行命令,由于是编译所以选择g++
"args": [
"${file}",//需要编译的任务名称
"-o${fileBasenameNoExtension}",
//生成文件的名称
//!!!!!!!!!//windows应改为"-o${fileBasenameNoExtension}"
"-g",//使生成文件可以调试
"-lstdc++",//链接
"-lm",//链接
"-std=gnu++11",//使用c++11标准
"-Wfatal-errors",//出现error就退出
"-O2"//开启O2优化
],
//以上为必要设置
"presentation": {
"echo": true,
"reveal": "always",
"focus": false,
"panel": "shared",
"showReuseMessage": true
},
"problemMatcher": {
"owner": "cpp",
"fileLocation": [
"relative",
"${workspaceFolder}"
],
"pattern": {
"regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
},
"promptOnClose": true
},
//和上一个相同,只是取消了O2优化(不然的话debug的时候会发生错误)
{
"label": "compile cpp file before debug",
"command":"g++",
"args": [
"${file}",
"-o${fileBasenameNoExtension}",
"-g",
"-lstdc++",
"-lm",
"-std=gnu++11",
"-Wfatal-errors",
],
"type": "shell",
"group": "build",
"presentation": {
"echo": false,
"reveal": "silent",
"focus": false,
"panel": "shared",
"showReuseMessage": false
},
"promptOnClose": true,
"problemMatcher": {
"owner": "cpp",
"fileLocation": [
"relative",
"${workspaceFolder}"
],
"pattern": {
"regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
}
},
//运行代码
{
"group": {
"kind": "test",
"isDefault": true
},
"label": "run the file",
"command":"${fileDirname}/${fileBasenameNoExtension}",
"presentation": {
"echo": true,
"reveal": "always",
"focus": false,
"panel": "shared",
"showReuseMessage": true
},
"dependsOn":"compile cpp file with O2"
}
]
}
然后就是设置快捷键
使用快捷键(Ctrl+K Ctrl+S)打开如下界面
然后点击 打开keybindings.json ,在打开的界面中填入以下内容
// Place your key bindings in this file to overwrite the defaults
[
{//设置不在调试阶段使用F10设断点,因为原来使用F9设置断点的
"key": "F10",
"when": "!inDebugMode",
"command":"editor.debug.action.toggleBreakpoint"
},
{//设置F9调用默认
"key": "F9",
"when":"!inDebugMode",
"command":"workbench.action.tasks.test"
}
]
这样我们就设置了F9一键编译运行代码
友情提示:在vscode中编译运行代码之前请先保存代码,否则代码修改无效
vscode为使用者做好了一个调试的界面以及各种按钮,然后插件的作者写出一个插件调用系统中已有的调试器(C/C++插件具有这种功能),三者共同调试你的程序。用通俗一点的话说就是你面对者那一堆前进、运行的箭头,每按一个按钮,vscode就告诉插件我要调试器做什么,然后插件就根据不同的调试器翻译成不同的命令给调试器,然后调试器就指挥者你的程序进行下一步。
要完成这一套流程,需要配置好launch.json文件
将以下目录复制进.vscode下的launch.json文件中
macos用户有注意点(许多感叹号处)
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch",//名称 显示在调试窗口上
"type": "cppdbg",//配置 由插件提供
"request": "launch",//配置类型 可选择启动或附加
"args": [],//启动调试器时额外配置的参数
"stopAtEntry": true,//是否选择在程序入口暂停 由于我一直忘记设置断点所以我选择是
"cwd": "${fileDirname}",//工作目录
"environment": [],
"preLaunchTask": "compile cpp file before debug",//在调试前运行的task 编译
"MIMode": "gdb",//使用的调试模式 由于我是Linux 所以选择gdb
//!!!!!!!!!!//注意 Windows用户设置为gdb MacOS用户设置为lldb
"linux": {
"program": "${fileDirname}/${fileBasenameNoExtension}",
//程序目录+名称
"miDebuggerPath": "/usr/bin/gdb",
//调试器目录,非必要 如不写则调用插件目录下的一个gdb
},
"windows": {
"program": "${fileDirname}\\${fileBasenameNoExtension}.exe"
//程序目录+名称
//"miDebuggerPath": "",//应修改为gdb的目录
//调试器目录,非必要 如不写则调用插件目录下的一个gdb
},
"osx": {
"program": "${fileDirname}/${fileBasenameNoExtension}",
//程序目录+名称
"miDebuggerPath": "/usr/bin/lldb-mi",
//调试器目录,非必要 如不写则调用插件目录下的一个lldb-mi
//注意此处不能写lldb 因为lldb没有mi模式
},
"setupCommands": [
{//增加对STL的输出支持 仅限gdb7以上的版本
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
更新时间:2018.11.10
情况描述:使用step in时总是进入库函数(如printf),然后右下角弹窗 无法打开文件 file///build/。。。
具体情况截图:
就是右下角这个,让人看起来觉得很烦,而且就卡在那边了
解决方法:在终端中输入 sudo strip /usr/lib/libstdc++.so.6.0.25
具体文件版本可能不同,但是就是那个libstdc++.so文件
更新时间:2018.11.10
可以,但是会碰见一些问题,主要就是无法输入(至少是我无法解决,如果有大神知道怎么解决,请评论一下,谢谢)
替代方案:在代码中使用重定向输入