在VSCODE上调试C代码
现在你不需要懂json配置也可以用VSCODE创建自己的C/C++工程了。
也预示着ARM交叉编译在VSCODE上可以简单完成了。
- 日常去除eclipse行动
- 万物皆可easy vscode
预备条件
要成功完成本教程,您必须执行以下步骤:
-
安装
Visual Studio Code
。 -
安装 C/C++ extension for VS Code。 您也可以通过在扩展视图 (
Ctrl+Shift+X
) 中搜索“c++
”来安装 C/C++ 扩展。
-
通过
MSYS2
获取最新版本的Mingw-w64
,它提供了 GCC、Mingw-w64 和其他有用的 C++ 工具和库的最新本机版本。MSYS2和Mingw-w64的最新版本链接随后放出。 然后按照 MSYS2 网站上的说明安装 Mingw-w64。 -
使用以下步骤将 Mingw-w64
bin
文件夹的路径添加到 WindowsPATH
环境变量:- 在 Windows 搜索栏中,键入“设置”或"setting"以打开 Windows 设置。
- 搜索编辑账户的环境变量。
- 找到
Path
,然后选择编辑。 - 选择新建并将 Mingw-w64 目标文件夹路径添加到系统路径。 确切的路径取决于您安装的 Mingw-w64 版本以及安装位置。 如果您使用上述设置安装 Mingw-w64,请将其添加到路径:
C:\msys64\mingw64\bin
。 - 选择确定以保存更新的 PATH。 您需要重新打开任何控制台窗口,新的 PATH 位置才可用。
检查MinGW安装
要检查您的 Mingw-w64 工具是否已正确安装并可用,请打开一个新的命令提示符并键入:
g++ --version
gdb --version
如果您没有看到预期的输出或者 g++
或 gdb
不是可识别的命令,请确保您的 PATH 条目与编译器所在的 Mingw-w64 二进制位置匹配。
创建Helloworld
在 Windows 命令提示符下,创建一个名为 projects 的空文件夹,您可以在其中放置所有 VS Code 项目。 然后创建一个名为 helloworld 的子文件夹,导航到其中,然后通过输入以下命令在该文件夹中打开 VS Code:
mkdir projects
cd projects
mkdir helloworld
cd helloworld
code .
"code .” 命令在当前工作文件夹中打开 VS Code,该文件夹成为您的“工作区”。 在学习本教程时,您将看到在工作区的 .vscode
文件夹中创建了三个文件:
tasks.json
(编译说明)launch.json
(调试器设置)c_cpp_properties.json
(编译器路径和 智能感知设置 )
添加源代码文件
在文件资源管理器标题栏中,选择新建文件按钮并将文件命名为 helloworld.cpp
。
添加源码
现在粘贴此源代码:
#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`) 中:
您还可以通过选中主文件菜单中的自动保存
来启用自动保存以自动保存您的文件更改。
最左侧的活动栏可让您打开不同的视图,例如搜索、源代码管理和运行。 您将在本教程后面查看 运行 视图。 您可以在 VS Code 用户界面文档中找到有关其他视图的更多信息。
注意:当您保存或打开 C++ 文件时,您可能会看到来自 C/C++ 扩展的关于 Insiders 版本可用性的通知,它允许您测试新功能和修复。 您可以通过选择
X
(清除通知)来忽略此通知。
探索智能感知
在新的 helloworld.cpp
文件中,将鼠标悬停在向量
或字符串
上以查看类型信息。 在 msg
变量声明之后,开始输入 msg
。 就像调用成员函数时一样。 您应该立即看到一个显示所有成员函数的完成列表,以及一个显示 msg
对象类型信息的窗口:
可以按 Tab 键插入选中的成员; 然后,当您添加左括号时,您将看到有关该函数所需的任何参数的信息。
编译helloworld.cpp
重点来了,光选不写也可以出好用的json
接下来,您将创建一个 tasks.json
文件来告诉 VS Code 如何构建(编译)程序。 此任务将调用 g++ 编译器以基于源代码创建可执行文件。
从主菜单中,选择Terminal > Configure Default Build Task。 在下拉列表中,将显示一个任务下拉列表,其中列出了 C++ 编译器的各种预定义构建任务。 选择 g++.exe构建活动文件,这将构建当前在编辑器中显示(活动)的文件。
这将在
.vscode
文件夹中创建一个 tasks.json
文件并在编辑器中打开它。
您的新 tasks.json
文件应该长这样:
{
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: g++.exe build active file",
"command": "C:/msys64/mingw64/bin/g++.exe",
"args": ["-g", "${file}", "-o", "${fileDirname}\\${fileBasenameNoExtension}.exe"],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": ["$gcc"],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "compiler: C:/msys64/mingw64/bin/g++.exe"
}
],
"version": "2.0.0"
}
command
设置指定要运行的程序; 在这种情况下是 g++。
args
数组指定将传递给 g++ 的命令行参数。 这些参数必须按照编译器预期的顺序指定。 这个任务告诉 g++ 获取活动文件(${file}
),编译它,并在当前目录(${fileDirname}
)中创建一个与活动文件同名但扩展名为.exe
的可执行文件($ {fileBasenameNoExtension}.exe
),从而为我们的示例生成 helloworld.exe
。
您可以在变量参考中了解有关 tasks.json 变量的更多信息。
label
是您将在任务列表中看到的内容; 你可以随意命名它。
group
对象中的 "isDefault": true
值指定当您按 Ctrl+Shift+B 时将运行此任务。 此属性仅为方便起见; 如果您将其设置为 false,您仍然可以使用 Tasks: Run Build Task 从终端菜单运行它。
运行 “构建”任务
- 返回
helloworld.cpp
。 您的任务构建活动文件,并且您想要构建helloworld.cpp
。 - 要运行在
tasks.json
中定义的构建任务,请按 Ctrl+Shift+B 或从终端主菜单中选择运行构建任务(Run Build Task)。 - 任务开始时,您应该会看到集成终端面板出现在源代码编辑器下方。 任务完成后,终端会显示编译器的输出,指示构建是成功还是失败。 对于成功的 g++ 构建,输出如下所示:
- 使用 + 按钮创建一个新终端,您将拥有一个以
helloworld
文件夹作为工作目录的新终端。 运行dir
,您现在应该会看到可执行文件helloworld.exe
。 - 您可以通过键入
helloworld.exe
(或.\helloworld.exe
,如果您使用 PowerShell 终端)在终端中运行helloworld
。
您最初可能需要按 Enter 几次才能在终端中看到 PowerShell 提示符。 此问题应在 Windows 的未来版本中修复。
确认tasks.json
您可以修改tasks.json
以使用“${workspaceFolder}\\*.cpp”
之类的参数而不是 ${file}
来构建多个 C++ 文件。 这将在当前文件夹中构建所有 .cpp
文件。 您还可以通过将“${fileDirname}\\${fileBasenameNoExtension}.exe”
替换为硬编码文件名(例如“${workspaceFolder}\\myProgram.exe”
)来修改输出文件名。
调试helloworld.cpp
接下来,您将创建一个launch.json
文件来配置 VS Code 在您按 F5 调试程序时启动 GDB 调试器。
- 从主菜单中,选择 Run > Add Configuration…,然后选择 C++ (GDB/LLDB)。
- 然后,您将看到各种预定义调试配置的下拉列表。 选择 g++.exe build and debug active file。
VS Code 创建一个launch.json
文件,在编辑器中打开它,然后构建并运行’helloworld’。
{
"version": "0.2.0",
"configurations": [
{
"name": "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"
}
]
}
program
设置指定要调试的程序。 此处设置为活动文件夹 ${fileDirname}
和活动文件(扩展名为 .exe
),如果 helloworld.cpp
是活动文件,则活动文件将是helloworld.exe
。
默认情况下,C++ 扩展不会向您的源代码添加任何断点,并且 stopAtEntry
值设置为 false
。
将 stopAtEntry
值更改为 true
以使调试器在您开始调试时停止在 main
函数。
注意:
preLaunchTask
设置用于指定启动前要执行的任务。 确保它与tasks.json
文件label
设置一致。
开始调试对话
- 返回
helloworld.cpp
使其成为活动文件。 - 按 F5 或从主菜单中选择 Run > Start Debugging。 在开始逐步执行源代码之前,让我们花点时间注意一下用户界面中的几个变化:
- 集成终端将会在源代码编辑器的底部出现。 在“调试输出”选项卡中,您会看到指示调试器已启动并正在运行的输出。
- 编辑器突出显示
main
方法中的第一条语句。 这是 C++ 扩展自动为您设置的断点:
- 左侧的运行视图显示调试信息。 您将在本教程后面看到一个示例。
- 在代码编辑器的顶部,会出现一个调试控制面板。 您可以通过抓住左侧的点在屏幕上移动它。
单步调试
现在您应该已准备好开始逐步执行代码。
- 单击或按调试控制面板中的
Step over
图标。
这会将程序执行推进到 for 循环的第一行,并跳过创建和初始化msg
变量时调用的vector
和string
类中的所有内部函数调用。 请注意左侧“变量”窗口中的更改。