前言
因为自己涉猎的语言已经不少了。Cpp,python,java,Go等等,之前用过很多编辑器和IDE ,比如VS ,eclipse,IDEA,pycharm ,sublime。。。发现其实学习IDE是需要学习成本的,尤其是时间成本。因为一个新的IDE或者编辑器需要一段适应过程,如果不熟悉IDE有些小问题都能让人非常抓狂,我强烈推荐一些经常切换语言的人(尤其是学生),最好用一种通用的IDE,这样真的可以节约很多学习成本,把更多的精力放到编程和算法本身上去。
vscode就是这样一个很通用也很强大的编辑器。
IDE与文本编辑器
我在刚刚接触编程的时候,看见网上有很多前辈跟我说 新手最好不要用IDE 我当时不懂。后来发现这句话真的很对,因为 IDE确实会掩盖住很多细节 这些真的不利于新手学习和理解编程语言。后来因为觉得sublime很帅,没错就是这个词。我也开始用编辑器,结果发现很多东西都需要自己配置,很多还是 json 版本的,那会觉得编辑器太愚蠢了。而且很多设置,根本不理解。后来看了《C++ primer 》才明白自己真的因为IDE忽略了很多细节。所以随着配置编辑器的过程,也与之前的理论相印证,真的加深了我对编程语言的理解。最后我个人更推荐vscode而不是sublime,只是觉得vscode是mircosoft支持的,仅此而已。当然sublime也同样优秀。
正题
设置 vscode (C++)并不算简单,尤其是当你不知道方法的时候,网上帖子多的不行,但我觉得没几个能用的,很多都是乱搞,而且没有说明设置和参数的意义啥的。所以我决定说一下。也算是我的学习笔记。
去官网下载好vscode以后,先安装插件
这四个插件分别的作用是:
- 支持C++/C
- 代码提示
- run(没错,你没看错,需要插件才能运行代码!)
- 代码高亮(我个人最喜欢Monokai 风格)
下载完成以后,Cpp就可以编译运行了。
调试
其实调试是一个很费劲的问题,因为需要一些配置,一般来说需要用到tasks.json(设置编译)和launch.json(设置调试)。快捷键shift+command+p 打开 Tasks: Configure Tasks,选择 Create tasks.json file from templates,在下拉列表中选择Others,这个时候tasks.json文件就会自动生成。其实这两个文件都是配置文件,需要自行设定参数的。
设置 tasks.json
这是一个编译设置文件,设置的就是debug之前的过程。因为C++这样的类C语言,运行必须是机器码,就是必须生成 .out 文件,机器才能再此基础上 分步骤运行(debug)这点很重要,很多人会遇到 * .out does not exist * 这样的问题就是因为事先没有进行编译。IDE 在这些方面真的隐藏了很多。
设置如下:
"version": "2.0.0",
"tasks": [
{
"label": "compile",
"type": "shell",
"command": "g++",
"args":[
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}.out",
"-g",
],
"group": {
"kind": "build",
"isDefault": true
}
}
]
对参数的说明:
label:名称,其实这个参数就是一个名字而已,要做的就是给这个过程命名。所以叫“阿猫”“阿狗”都可以。
type:有两种(shell/process),shell的意思相当于先打开shell再输入命令,process是直接运行命令,但一般都设置 “shell”。
command:命令,意思是用什么命令去执行编译。一般来说 g++编译C++,gcc 编译 C。
args:这个就是文件的参数了。
- 首先是编译的文件对象 ${file}的意思就是当前文件,里面有绝对路径,所以不要自作聪明加上什么路径。那样编译器会找不到文件的。
- “-o”这个是设定编译玩后的 .out 文件叫什么名字,这里要注意,等一下 launch 里面就会要用到这个文件,所以这个地方要保持一致。这个地方有点特殊 如果不进行特殊设置,编译的输出文件居然叫 a.out,而不是以源文件的名字命名。而我的设置就是以源文件名命名 .out 文件。这样符合常规一点。
- “-g” 这个是通用的,编译必须这么设置。
其他参数都是通用的。
设置 launch.json
launch.json 就是设定调试的。调试本质是“分步运行” 所以debug本质和run没有区别。都是要基于编译好的机器码。
{
"name": "(lldb) Launch",
"type": "cppdbg",
"request": "launch",
"program":"${fileDirname}/${fileBasenameNoExtension}.out",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
// "preLaunchTask": "${file}",
"externalConsole": true,
// "preLaunchTask": "g++",
"MIMode": "lldb"
},
]
参数说明
- name:这个要保持和debug旁边的设定一致。
- type: 填Cppdbg(c++ debug)
- “request”:请求配置类型,可以为launch(启动)或attach(附加)
- program :这是需要注意的,这个的意思是debug运行对象,就像我之前说的,debug运行对象并不是cpp文件,而是和 run 一样运行的是 .out 文件,所以要和之前编译tasks.json产生的文件名一致。如果之前并没有设定,那记得输入默认文件 a.out。
其他说明:
在很多window版本的 vscode 设定上,要设定prelaunchtask 我尝试过,感觉没啥用。而且mac 好像并不需要这个设定。这个设定的作用和 tasks.json 的作用是一致的,所以个人觉得可能不需要重复设定。
至此设定完成。
在debug过程中terminal 无法输入的问题
debug中居然无法在terminal中进行输入。。。
在setting中设置 run 集成到terminal中即可
把这个钩上。
当然在json中设置也可以。
这样,当debug的时候,就会弹出一个终端,有可能弹出到其他界面。然后把该终端移动到vscode的这个窗口(mac优势阿!!)。就形成了这样的界面
右边就是集成的终端,当debug的时候,就可以在这里进行输入。
至此相关设置完成