很多免费IDE我用着不顺手。
好用的CLion要钱。
VSCode不二之选。
界面跟Windows一模一样的界面,支持的语言还不少,微软自家开发的几个插件就很好用,还有很多第三方插件。对新手还算友好。
除此之外,最赞的就是,即使你从命令行启动vscode,它也不会就占用你一个命令行窗口,vscode打开以后,命令行将会直接返回,此时你可以使用这个命令行做其他的事情。
而我们看看kDevelop,如果你从命令行启动,这个窗口将会是这样…
首先我们打开vscode。我的建议是从命令行打开。
首先你需要新建一个工程目录,比如就叫template
吧
然后你需要做的是在此目录中打开vscode
mkdir template
code template/
如果找不到code这个命令,可能安装有问题。
VSCode的debug配置,都是通过json文件完成的,就跟上面这张图一样。
需要配置的json文件一共有两个,launch.json和tasks.json
我们先看launch,json
要使用调试的话只需要点击Debug下面的Start Debugging,或者直接按F5
如果已经配置过了,这时就直接开始调试了。如果你还没有配置过,选择C++(GDB/LLDB),这是应该会弹出一个默认的launch.json模板,就像这样
这是默认的代码
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "enter program name, for example ${workspaceFolder}/a.out",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
这个文件我们需要关注的点只有两个。
首先是你的可执行文件的路径。
"program": "enter program name, for example ${workspaceFolder}/a.out",
这里模板中提示输入可执行文件的路径,给了一个例子${workspaceFolder}/a.out
,这个${workspaceFolder}
就是工程目录,在我这里就是template
。这个a.out
就是个g++默认选项下生成的可执行文件名称。我们将这句话改成自己的可执行文件路径就行了。
如果你说我还没有可执行文件,可以等下再配置这个
其次是你需要在下面添加配置preLaunchTask,就像这样
"preLaunchTask": "build"
这个是可以自动补全的,改完大概是这样
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build/a.out",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}/build",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "build"
}
]
}
即在调试开始前要进行的任务。为了gdb能够调试,我们要确保调试开始前已经生成了可执行文件,这个make就是一个生成可执行文件的过程,稍后我们会进行配置。
使用快捷键Ctrl+Shift+P,选择Tasks: Configure Task没有的话可以搜索,然后依次选择下面的项
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "echo",
"type": "shell",
"command": "echo Hello"
}
]
}
解释一下,这是任务配置文件,默认情况下这里只有一个任务
"label": "echo",
这里配置这个任务的名字,这里给出一个默认的名字echo
,你可以改成你想要的名字,比如我这里叫build
,这个名字是为了让之前的launch.json文件能够知道你要运行哪个任务
"type": "shell",
这个说明该任务在shell中运行,不用改
"command": "echo Hello"
这是这个任务运行的指令,例如这个默认的就是在命令行中显示Hello
我们要使用g++编译你的源代码,我们假设你的源代码为main.cpp,则g++的编译命令为
g++ main.cpp
这将在你的工程目录下生成一个a.out文件,如果需要定义更多操作,请自行查询g++的文档。
这条命令包含一个参数main.cpp
,因此我们需要把参数添加到tasks.json中,完成以后是这样
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "build",
"type": "shell",
"command": "g++",
"args": [
"-std=c++11",
"-g",
"main.cpp"
]
}
]
}
由于使用了C++11标准,因此需要把这也作为参数给到g++,即,我们这里使用的命令是
g++ -std=c++11 -g main.cpp
这样,如果你之前在launch.json中调用的任务名称与这里的label
对应的名称一致,保存这两个json文件,你应该就能开始编译了
使用CMake配置上会麻烦一点,但是当源代码文件比较多的时候,是比g++更好用的,很多其它的IDE都支持CMake。CMake生成可执行文件,包含两步,即cmake与make,并且你需要提前新建一个build目录用来存放cmake生成的文件。
由于tasks.json中的task一次只能运行一条命令,因此我们需要建两个task,task.json代码如下
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "cmake",
"type": "shell",
"options": {
"cwd": "${workspaceFolder}/build"
},
"command": "cmake",
"args": [
"-DCMAKE_BUILD_TYPE=Debug",
"${workspaceFolder}"
// "..",
],
},
{
"label": "make",
"type": "shell",
"command": "make",
"options": {
"cwd": "${workspaceFolder}/build"
},
"dependsOn": [
"cmake"
]
},
]
}
这里包含cmake与make两个任务。由于cmake与make均需要在特定的目录下运行,因此我们需要给两个任务添加选项
"options": {
"cwd": "${workspaceFolder}/build"
},
这表示cmake与make的命令需要在${workspaceFolder}/build
目录下运行。
然后如何让这两个任务依次运行呢,我们在make任务中添加了依赖
"dependsOn": [
"cmake"
]
表示在运行make之前,先运行cmake,这样就能够与我们使用CMake的一般过程相同
"args": [
"-DCMAKE_BUILD_TYPE=Debug",
"${workspaceFolder}"
// "..",
],
此外需要注意的是,在cmake的参数中,我们添加了"-DCMAKE_BUILD_TYPE=Debug"
,如果缺少这一参数,我们是无法进行断点调试的。为此你还需要在你的CMakeLists.txt中加上
set(CMAKE_BUILD_TYPE Debug)
由此,VSCode就能够对C++进行断点调试了