📜  VS代码|使用C++进行构建,运行和调试

📅  最后修改于: 2021-05-30 16:25:12             🧑  作者: Mango

在本文中,我们将讨论断点调试所需的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调试器。让我们详细讨论这些属性:

  1. 名称类型:这些都是不言自明的,它们指的是launch.json的名称和类型。
  2. request:声明JSON文件的类型。
  3. 程序:存储该launch.json文件的程序的详细地址。
  4. cwd:表示当前工作目录。请注意, launch.json文件中的所有地址都是通用格式,并非特定于任何文件。
  5. externalConsole:由于无法在VS Code的集成终端中处理输入/输出,因此请使用外部控制台。因此将其设置为true
  6. miDebuggerPath:指向调试器的位置,此位置因用户而异。
  7. 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文件和创建可执行文件的命令,如下所示:

脚步:

  • launch.json的最后一步中,我们单击了左上角的播放按钮,现在出现一个对话框,提示当前目录中没有task.json文件。因此,我们需要创建一个,因此点击Configure Task

  • 然后单击“模板创建Task.json文件”。

  • 然后单击其他

  • 将上面提供的代码粘贴到新创建的task.json文件中。确保删除现有代码,然后再删除。

控制台调整

脚步:

  • 在已经覆盖的一点是,在externalConsolelaunch.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现场课程美国》。