这里将介绍配置Visual Studio Code以使用GCC C ++编译器(g ++)和GDB调试器来创建和调试在Windows上运行的程序。
- 安装VS Code的C/C++扩展。可以通过在扩展视图中搜索“c++”来安装C/C++扩展(Ctrl+Shift+X)。
-
通过MSYS2获取最新版本的Mingw-w64,该软件提供了GCC,Mingw-w64和其他有用的C++工具和库的最新本地版本。可以从MSYS2页面下载最新的安装程序,或使用此链接到安装程序。
-
按照MSYS2网站上的Installation说明安装Mingw-w64。
-
安装Mingw-w64工具链(
pacman -S --needed base-devel mingw-w64-x86_64-toolchain
)。在MSYS2终端中运行pacman
命令。接受默认值以安装toolchain
组中的所有成员。 -
使用以下步骤将Mingw-w64的
bin
文件夹的路径添加到Windows的PATH
环境变量中:例如路径:C:\\msys64\\mingw64\\bin
。
检查您的MinGW安装
要检查您的Mingw-w64工具是否正确安装并可用,请打开一个msys2命令的终端提示符并键入:
gcc --version
g++ --version
gdb --version
- 如果您没有看到预期的输出或
g++
或gdb
不是已识别的命令,请确保您的PATH条目与编译器所在的Mingw-w64二进制位置匹配。如果编译器不存在于该PATH条目中,请确保您遵循了MSYS2网站上的说明安装Mingw-w64。 - 如果
gcc
有正确的输出但gdb
没有,则需要从Mingw-w64工具集中安装您缺少的软件包。- 缺少
mingw-w64-gdb
软件包是尝试编译时出现“miDebuggerPath的值无效”的消息的原因之一,如果您的PATH正确,则需要安装软件包。
- 缺少
添加 hello world 示例程序
现在粘贴以下源代码:
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main() {
vector<string> msg {"Hello", "C++", "World", "from", "VS Code", "and the C++ extension!"};
for (const string& word : msg) {
cout << word << " ";
}
cout << endl;
}
运行 helloworld.cpp
-
打开 helloworld.cpp,使其成为活动文件。
-
单击编辑器右上角的三角形按钮。
image2.png
- 从系统检测到的编译器列表中选择C/C++:g++.exe build and debug active file。
只有在第一次运行 helloworld.cpp 时才会要求您选择编译器。此编译器将作为“默认”编译器设置在 tasks.json 文件中。
- 构建成功后,程序的输出将出现在集成的终端中。
image4.png
第一次运行程序时,C++ 扩展将创建 tasks.json,可以在项目的 .vscode 文件夹中找到它。tasks.json 存储构建配置。
新 tasks.json 文件应类似于以下 JSON:
{
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: g++.exe build active file",
"command": "C:\\\\\\\\msys64\\\\\\\\mingw64\\\\\\\\bin\\\\\\\\g++.exe",
"args": [
"-fdiagnostics-color=always",
"-g",
"${file}",
"-o",
"${fileDirname}\\\\\\\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": ["$gcc"],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "Task generated by Debugger."
}
],
"version": "2.0.0"
}
Debug调试
调试跟vscode使用其他调试工具没什么差别,
- 如设置断点的行,再运行Debug。
使用launch.json自定义调试
使用播放按钮或F5进行调试时,C ++扩展会即时创建动态调试配置。
有些情况下,你希望自定义调试配置,例如指定在运行时传递给程序的参数。可以在launch.json
文件中定义自定义调试配置。
要创建launch.json
,请从以下设置中选择“添加调试配置”。
然后,将看到各种预定义的调试配置的下拉列表。选择C/C++: g++.exe build and debug active file。
image7.pngVS Code将创建一个名为launch.json
的文件,其外观类似于以下内容:
{
"version": "0.2.0",
"configurations": [
{
"name": "C/C++: g++.exe build and debug active file",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}\\\\\\\\${fileBasenameNoExtension}.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "C:\\\\\\\\msys64\\\\\\\\mingw64\\\\\\\\bin\\\\\\\\gdb.exe",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "C/C++: g++.exe build active file"
}
]
}
在上面的 JSON 中,program
指定您想要调试的程序。在此,它设置为活动文件夹(${fileDirname}
)和具有.exe
扩展名的活动文件名称(${fileBasenameNoExtension}.exe
),如果helloworld.cpp
是活动文件,则为helloworld.exe
。args
属性是要在运行时传递给程序的参数数组。
默认情况下,C++扩展不会向您的源代码添加任何断点,stopAtEntry
的值为false
。
将stopAtEntry
的值更改为true
,以使调试器在开始调试时停在main
方法上。
从现在开始,播放按钮和F5将从您的launch.json文件中读取,以便在进行调试时启动程序。
网友评论