赞
踩
Windows
上使用
Microsoft Visual c++
编译器和调试器配置
Visual Studio Code
。
要成功完成本教程,您必须完成以下步骤:
1.安装Visual Studio Code。
2.安装VS Code的C/ c++扩展。你可以通过在Extensions视图中搜索’c++’ (Ctrl+Shift+X)
来安装C/ c++扩展。
3.安装Microsoft Visual c++ (MSVC)编译器工具集。
如果您有一个最新版本的Visual Studio,请从Windows开始菜单中打开Visual Studio Installer
,并查看是否检查了c++工作负载。如果没有安装,则选中该框并选择安装程序中的Modify
按钮。
您也可以安装带有c++工作负载的桌面开发,而不需要安装完整的Visual Studio IDE。从Visual Studio下载页面向下滚动,直到在All Downloads
下看到Tools for Visual Studio 2019
,并选择Build Tools for Visual Studio 2019
下载。
这将启动Visual Studio安装程序,它将弹出一个对话框,显示可用的Visual Studio构建工具工作负载。检查Desktop development with C++
负载并选择Install
。
注意:您可以使用Visual Studio Build Tools
的c++工具集和Visual Studio Code编译、构建和验证任何c++代码库。
要从命令行或VS Code
中使用MSVC
,你必须在Developer Command Prompt for Visual Studio
中运行。普通shell(如PowerShell、Bash或Windows命令提示符)
没有设置必要的路径环境变量。
要打开Developer Command Prompt for VS
,在Windows开始菜单中输入“Developer”,你应该会看到它出现在建议列表中。确切的名称取决于您安装的Visual Studio或Visual Studio构建工具的版本。选择要打开提示符的项目。
你可以通过输入'cl'
来测试你是否已经正确安装了c++编译器cl.exe
,你应该会看到带有版本和基本用法描述的版权信息。
如果开发人员命令提示符使用BuildTools位置作为开始目录(你不会想把项目放在那里),在你开始创建新项目之前,导航到你的用户文件夹(C:\users\{你的用户名}\
)。
在Developer Command Prompt
中,创建一个名为“projects”
的空文件夹,在这里你可以存储所有的VS Code项目,然后创建一个名为“helloworld”
的子文件夹,导航到它,通过输入以下命令在该文件夹(.)
中打开VS Code (Code)
:
mkdir projects
cd projects
mkdir helloworld
cd helloworld
code .
"code ."
命令在当前工作文件夹中打开VS code,这将成为你的"workspace"
。在学习本教程的过程中,你会看到在工作区的.vscode
文件夹中创建了三个文件:
tasks.json
(构建指令)launch.json
(调试器设置)c_cpp_properties.json
(编译器路径和智能感知设置)在“文件资源管理器”
标题栏中,选择“新建文件”
按钮,并将文件命名为helloworld.cpp
。
helloworld
源代码现在粘贴源代码:
#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; }
现在按Ctrl+S
保存文件。注意你刚刚添加的文件是如何出现在VS Code的侧边栏的文件资源管理器视图中(Ctrl+Shift+E
):
您也可以启用“Auto Save”来自动保存您的文件更改,通过检查File
菜单中的“Auto Save”。
最左边的活动栏允许您打开不同的视图,如Search、Source Control和Run
。在本教程的后面,您将看到Run
视图。你可以在VS Code用户界面文档中找到更多关于其他视图的信息。
注意:
当你保存或打开一个C++文件时,你可能会看到来自C/C++扩展的通知,关于内部版本的可用性,它允许你测试新特性和修复。您可以通过选择X
(清除通知)来忽略此通知。
在新的helloworld.cpp
文件中,将鼠标悬停在vector或string上以查看类型信息。在声明了msg变量之后,开始键入msg。就像调用成员函数一样。你应该立即看到一个显示所有成员函数的完成列表,以及一个显示msg对象类型信息的窗口:
按Tab
键可插入所选成员;然后,当您添加开括号时,您将看到关于函数所需的任何参数的信息。
接下来,您将创建一个tasks.json
文件告诉VS Code如何构建(编译)程序。这个任务将调用Microsoft c++编译器来基于源代码创建一个可执行文件。
从主菜单中选择Terminal > Configure Default Build Task
。在下拉菜单中,它将显示一个任务下拉菜单,列出c++编译器的各种预定义构建任务。选择cl.exe build active file
,它将构建当前在编辑器中显示(活动)的文件。
这将在.vscode
目录下创建一个tasks.json
文件,并在编辑器中打开它。
你的新tasks.json
文件看起来应该类似于下面的json(已经安装中文扩展模块):
{ "version": "2.0.0", "tasks": [ { "type": "cppbuild", "label": "C/C++: cl.exe 生成活动文件", "command": "cl.exe", "args": [ "/Zi", "/EHsc", "/nologo", "/Fe:", "${fileDirname}\\${fileBasenameNoExtension}.exe", "${file}" ], "options": { "cwd": "${fileDirname}" }, "problemMatcher": [ "$msCompile" ], "group": { "kind": "build", "isDefault": true }, "detail": "编译器: cl.exe" } ] }
command
设置指定要运行的程序;在本例中是"cl.exe"
。args
数组指定将被传递给cl.exe
的命令行参数。这些参数必须按照编译器所期望的顺序指定。这个任务告诉c++编译器把活跃的文件(${file}
),编译它,并在当前目录(${fileDirname}
)创建一个与有源文件名称相同的. exe
可执行文件(${fileBasenameNoExtension}.exe)
,对于我们的示例是helloworld.exe
。
注意:您可以了解更多关于tasks.json
的信息。
label
是你将在任务列表中看到的;你想叫什么就叫什么。
problemMatcher
值选择用于查找编译器输出中的错误和警告。对于cl.exe
,如果使用$msCompile
问题匹配器,您将得到最好的结果。
group
对象中的isDefault: true
值指定当按Ctrl+Shift+B
时将运行此任务。这个属性只是为了方便;如果您将其设置为false
,您仍然可以使用Tasks: Run Build Task
从终端菜单中运行它。
helloworld.cpp
。您的任务将构建活动文件,而您希望构建helloworld.cpp
tasks.json
中定义的构建任务,按Ctrl+Shift+B
或从终端主菜单选择Tasks: Run Build Task
构建任务。cl.exe
,或者缺少包含路径,确保你已经从Developer Command Prompt for Visual Studio
中启动了VS Code。+
按钮创建一个新终端,您将拥有一个以helloworld
文件夹作为工作目录的新终端(运行PowerShell)。运行ls
,您现在应该看到可执行文件helloworld.exe
以及各种中间c++输出和调试文件(helloworld.obj helloworld.pdb
)。.\helloworld.exe
运行helloworld
。您可以通过使用像${workspaceFolder}\\*.cpp
这样的参数而不是${file}
来构建多个c++文件。这将构建当前文件夹中的所有.cpp
文件。你也可以通过将${fileDirname}\\${fileBasenameNoExtension}.exe
替换为硬编码的文件名(例如${workspaceFolder}\\myProgram.exe
)来修改输出文件名。
${workspaceFolder}
表示工作目录也就是code .
的目录,而${fileDirname}
表示打开的文件所在的目录。
接下来,当你按下F5
来调试程序时,VS Code将创建一个launch.json
文件来启动Microsoft c++调试器。在主菜单中,选择Run > Add Configuration...
然后选择c++ (Windows)
。
然后,您将看到一个用于各种预定义调试配置的下拉列表。选择cl.exe build and debug active file
。
VS Code创建一个launch.json
文件,在编辑器中打开它,构建并运行helloworld
。
VS Code创建一个launch.json
文件,在编辑器中打开它,并构建并运行helloworld
。
{ // 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": "cl.exe - 生成和调试活动文件", "type": "cppvsdbg", "request": "launch", "program": "${fileDirname}\\${fileBasenameNoExtension}.exe", "args": [], "stopAtEntry": false, "cwd": "${fileDirname}", "environment": [], "console": "externalTerminal", "preLaunchTask": "C/C++: cl.exe 生成活动文件" } ] }
program
设置指定要调试的程序。在这里,它被设置为活动文件文件夹${fileDirname}
和带有.exe
扩展名的活动文件名${fileBasenameNoExtension}.exe
,如果helloworld.cpp
是活动文件,exe
文件将是helloworld.exe
。
默认情况下,c++扩展不会在源代码中添加任何断点,并且stopAtEntry
值设置为false
。将stopAtEntry
值更改为true
,以使调试器在开始调试时在main
上停止。
helloworld.cpp
,使它成为活动文件。F5
或从主菜单中选择Run > Start Debugging
。在您开始逐步执行源代码之前,让我们花点时间来注意一下用户界面中的几个变化:
Debug Output
选项卡中,可以看到指示调试器已启动并正在运行的输出。main
方法中的第一条语句。这是一个断点,c++扩展自动为您设置:Run
视图显示调试信息。在本教程的后面,您将看到一个示例。现在,您可以开始逐步执行代码了。
Step over
图标,直到for (const string& word: msg)
语句突出显示。Step Over
命令跳过在创建和初始化msg变量时调用的vector和string
类中的所有内部函数调用。注意左边的Variables
窗口中的变化。在这种情况下,错误是预期的,因为尽管循环的变量名现在对调试器可见,但语句还没有执行,所以此时没有可读的内容。但是msg
的内容是可见的,因为语句已经完成。Step Over
进入程序中的下一条语句(跳过为初始化循环而执行的所有内部代码)。现在,Variables
窗口显示了关于循环变量的信息。Step over
来执行cout
语句。截至2019年3月版本的扩展,没有输出显示,直到循环完成。Step over
,直到vector
中的所有单词都被打印到控制台。但是,如果您对此感到好奇,可以尝试按下Step Into
按钮来逐步查看c++标准库中的源代码!Step over
。另一种方法是在代码中设置断点,方法是切换到代码编辑器中的helloworld.cpp
选项卡,将插入点放在循环中cout
语句的某个位置,然后按F9
。左边的凹槽中出现一个红点,表示在该行上设置了断点。F5
从标准库头文件的当前行开始执行。执行将中断在cout
。如果您愿意,可以再次按F9
来切换断点。有时,您可能希望在程序执行时跟踪变量的值。您可以通过在变量上设置一个watch
来做到这一点。
watch
窗口中,选择加号,并在文本框中输入word
,这是循环变量的名称。现在,当您步进循环时,查看Watch
窗口。int i = 0;
来添加另一个watch
,然后,在循环内部添加如下语句++i;
。现在为i
添加一个watch
,就像你在前面的步骤中做的那样。如果您想要更多地控制 C/C++扩展,可以创建c_cpp_properties.json
文件,它将允许你改变设置,如编译器的路径,包括路径,c++标准(默认是c++ 17),以及更多。
您可以通过命令面板(Ctrl+Shift+P
)运行命令C/C++: Edit Configurations (UI)
来查看C/C++配置UI。
这将打开C/C++ Configurations
页面。当您在这里进行更改时,VS Code
将它们写入.vscode
文件夹中名为c_cpp_properties.json
的文件。
Visual Studio Code
将这些设置放在.vscode\c_cpp_properties.json
中。如果你直接打开那个文件,它应该是这样的:
{ "configurations": [ { "name": "Win32", "includePath": [ "${workspaceFolder}/**" ], "defines": [ "_DEBUG", "UNICODE", "_UNICODE" ], "windowsSdkVersion": "10.0.17763.0", "compilerPath": "C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\VC\\Tools\\MSVC\\14.16.27023\\bin\\Hostx64\\x64\\cl.exe", "cStandard": "c17", "cppStandard": "c++17", "intelliSenseMode": "windows-msvc-x64" } ], "version": 4 }
如果程序包含不在工作空间或标准库路径中的头文件,则只需要添加到includePath
数组设置中。
compilerPath
设置是配置中的一个重要设置。扩展使用它来推断c++标准库头文件的路径。当扩展知道在哪里找到这些文件,它可以提供有用的功能,如智能补全和Go to Definition
导航。
C/C++扩展尝试根据它在系统上找到的编译器位置来填充compilerPath
。该扩展查找几个常见的编译器位置。
compilerPath
的搜索顺序是:
如果安装了g++或WSL,可能需要更改compilerPath
以匹配项目的首选编译器。对于Microsoft c++,路径应该像这样,取决于你安装的具体版本:“C:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC/Tools/MSVC/14.16.27023/bin/Hostx64/x64/cl.exe”
。
VS Code现在配置为使用Microsoft c++编译器。该配置应用于当前工作区。要重用配置,只需将JSON文件复制到一个新项目文件夹(工作区)中的.vscode
文件夹中,并根据需要更改源文件和可执行文件的名称。
Developer Command Prompt
外运行VS Code在某些情况下,在Visual Studio的Developer Command Prompt
中运行VS Code是不可能的(例如,在通过SSH的远程开发场景中)。在这种情况下,您可以使用以下tasks.json
配置在构建期间自动初始化Visual Studio的Developer Command Prompt
。
{ "version": "2.0.0", "windows": { "options": { "shell": { "executable": "cmd.exe", "args": [ "/C", // The path to VsDevCmd.bat depends on the version of Visual Studio you have installed. "\"C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/Common7/Tools/VsDevCmd.bat\"", "&&" ] } } }, "tasks": [ { "type": "shell", "label": "cl.exe build active file", "command": "cl.exe", "args": [ "/Zi", "/EHsc", "/Fe:", "${fileDirname}\\${fileBasenameNoExtension}.exe", "${file}" ], "problemMatcher": ["$msCompile"], "group": { "kind": "build", "isDefault": true } } ] }
注意: VsDevCmd.bat
的路径可能会因Visual Studio版本或安装路径的不同而不同。你可以通过打开命令提示符并运行dir "\VsDevCmd*" /s
来找到VsDevCmd.bat
的路径。
如果你看到错误”The term ‘cl.exe’ is not recognized as the name of a cmdlet, function, script file, or operable program”,这通常意味着您正在运行Developer Command Prompt for Visual Studio
以外的Visual Studio和VSCode不知道cl.exe
编译器的路径。
VS Code必须从Visual Studio的Developer Command Prompt for Visual Studio
启动,或者任务必须配置为在开发人员命令提示符之外运行。
你总是可以通过创建一个新终端Ctrl+Shift+``通过输入cl命令来检查你是否从Visual Studio的Developer Command Prompt for Visual Studio
启动。
在这种情况下,cll .exe
可以通过PATH
环境变量被VS Code
使用,但是VS Code
仍然需要从Visual Studio的Developer Command Prompt
启动,或者配置为在Developer Command Prompt之外运行。否则,cl.exe
无法访问重要的环境变量,如INCLUDE
。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。