在本文中,我们将讨论断点调试所需的VS Code设置。首先创建一个文件launch.json ,该文件将VS Code配置为在调试过程开始时启动GDB调试器。然后创建一个文件task.json ,该文件告诉VS Code如何构建(编译)程序。最后,对控制台设置进行一些更改,并实现构建和调试。
程序:
下面是用于演示目的的代码:
C++
// C++ program to find the value of
// the pow(a, b) iteratively
#include
using namespace std;
// Driver Code
int main()
{
int a, b, pow = 1;
// Input two numbers
cin >> a >> b;
// Iterate till b from 1
for (int i = 1; i <= b; i++) {
pow = pow * a;
}
// Print the value
cout << pow;
}
C++
// C++ program to find the value of
// the pow(a, b) iteratively
#include
#include
using namespace std;
// Driver Code
int main()
{
int a, b, pow = 1;
// Input two numbers
cin >> a >> b;
// Iterate till b from 1
for (int i = 1; i <= b; i++) {
pow = pow * a;
}
// Print the value
cout << pow;
_getch();
}
Launch.json
该文件与诸如调试器的名称,调试器的路径,当前CPP文件的目录以及有关数据的控制台之类的信息有关。以下是文件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": "g++.exe - Build and debug active file",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}
\\${fileBasenameNoExtension}.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"miDebuggerPath": "C:\\MinGW\\bin\\gdb.exe",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "C/C++: g++.exe build active file"
}
]
}
launch.json中的重要术语:可以完全使用上面给出的代码,也可以使用在计算机中自动生成的代码。在这两种情况下,您都必须采取一些预防措施。首先,请确保将属性“ externalConsole”标记为true(我们将在本主题的后面部分了解其含义)。然后检查属性“ miDebuggerPath”是否正确指向gdb调试器。让我们详细讨论这些属性:
- 名称和类型:这些都是不言自明的,它们指的是launch.json的名称和类型。
- request:声明JSON文件的类型。
- 程序:存储该launch.json文件的程序的详细地址。
- cwd:表示当前工作目录。请注意, launch.json文件中的所有地址都是通用格式,并非特定于任何文件。
- externalConsole:由于无法在VS Code的集成终端中处理输入/输出,因此请使用外部控制台。因此将其设置为true 。
- miDebuggerPath:指向调试器的位置,此位置因用户而异。
- preLaunchTask:这包含task.json文件的名称。
脚步:
- 转到屏幕左侧的“运行”选项卡,然后单击“运行并调试”。
- 系统将要求您选择调试器,然后选择C++(GDB / LLDB)。请注意,此选项将出现只有当你有MinGW的安装在你的电脑配置。(请参阅本文安装和配置MinGW的)。
- 然后选择“ g ++。exe –构建和调试活动文件”。它指的是g ++ GNU C++编译器。
- 之后,将显示一个Launch.json文件,您可以使用它,也可以使用我在上面提供的文件。再次确保externalConsole标记为true,并且miDebuggerPath设置正确。
- 之后,单击屏幕左上方的播放按钮,然后移至task.json文件。
Tasks.json :
该文件包含诸如用于编译的命令,编译器的地址,与launch.json相同的标签之类的信息,以及一些其他信息。以下是文件task.json中的代码:
{
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "C/C++: g++.exe build active file",
"command": "C:\\MinGW\\bin\\g++.exe",
"args": [
"-std=c++11",
"-O2",
"-Wall",
"-g",
"${file}",
"-o",
"${fileDirname}
\\ ${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"isDefault": true,
"kind": "build"
}
}
]
}
task.json中的重要术语:上面提到的task.json文件可以完全使用而无需谨慎。但是,唯一需要注意的是, tasks.json的标签应与Launch.json的preLaunchTask匹配。让我们更详细地讨论一些术语:
- 标签:这是task.json文件所独有的,launch.json使用它在执行之前调用task.json。
- command :这指向g ++编译器应用程序,因为它将在编译中使用
- args:这些参数以及连接时的命令看起来就像是我们用于编译CPP文件和创建可执行文件的命令,如下所示:
g++ -std=c++11 -O2 -Wall ${file} -o ${fileDirname}\\${fileBasenameNoExtension}.exe
脚步:
- 在launch.json的最后一步中,我们单击了左上角的播放按钮,现在出现一个对话框,提示当前目录中没有task.json文件。因此,我们需要创建一个,因此点击Configure Task 。
- 然后单击“从模板创建Task.json文件”。
- 然后单击其他。
- 将上面提供的代码粘贴到新创建的task.json文件中。确保删除现有代码,然后再删除。
控制台调整
脚步:
- 在已经覆盖的一点是,在externalConsole有launch.json是真实的。
- 现在,在程序中包含conio.h头文件,并在main()函数的最后调用get-character方法。这将阻止命令提示符在执行完成后立即消失,以便我们有时间检查输出,直到按任意字符为止。现在,代码变为:
C++
// C++ program to find the value of
// the pow(a, b) iteratively
#include
#include
using namespace std;
// Driver Code
int main()
{
int a, b, pow = 1;
// Input two numbers
cin >> a >> b;
// Iterate till b from 1
for (int i = 1; i <= b; i++) {
pow = pow * a;
}
// Print the value
cout << pow;
_getch();
}
- 在我们要检查/调试的某些代码行上放置一个红色断点。
- 然后,我们单击屏幕左上方的播放按钮以开始构建。
断点调试:
脚步:
- 在出现的命令提示符中,我们输入所需的输入,然后按Enter 。
- 我们注意到执行开始并且在提到的断点处暂停。
- 现在有一些选项,我们可以继续,跨步,进入,退出或重新开始执行。您可以执行任何您想调试的代码。
- 另外,在屏幕左侧注意执行时所有变量的值。
- 根据需要进行调试,然后执行完所有操作后,转到命令提示符并注意那里的输出。
- 检查完输出后,按任意键关闭命令提示符。
如果您希望与行业专家一起参加现场课程,请参阅《 Geeks现场课程》和《 Geeks现场课程美国》。