在VScode上调试C代码

在VSCODE上调试C代码

现在你不需要懂json配置也可以用VSCODE创建自己的C/C++工程了。
也预示着ARM交叉编译在VSCODE上可以简单完成了。

  • 日常去除eclipse行动
  • 万物皆可easy vscode

预备条件

要成功完成本教程,您必须执行以下步骤:

  1. 安装 Visual Studio Code

  2. 安装 C/C++ extension for VS Code。 您也可以通过在扩展视图 (Ctrl+Shift+X) 中搜索“c++”来安装 C/C++ 扩展。
    扩展商店

  3. 通过 MSYS2 获取最新版本的 Mingw-w64,它提供了 GCC、Mingw-w64 和其他有用的 C++ 工具和库的最新本机版本。 MSYS2和Mingw-w64的最新版本链接随后放出 。 然后按照 MSYS2 网站上的说明安装 Mingw-w64。

  4. 使用以下步骤将 Mingw-w64 bin 文件夹的路径添加到 Windows PATH 环境变量:

    1. 在 Windows 搜索栏中,键入“设置”或"setting"以打开 Windows 设置。
    2. 搜索编辑账户的环境变量
    3. 找到Path,然后选择编辑。
    4. 选择新建并将 Mingw-w64 目标文件夹路径添加到系统路径。 确切的路径取决于您安装的 Mingw-w64 版本以及安装位置。 如果您使用上述设置安装 Mingw-w64,请将其添加到路径:C:\msys64\mingw64\bin
    5. 选择确定以保存更新的 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 从终端菜单运行它。

运行 “构建”任务

  1. 返回 helloworld.cpp。 您的任务构建活动文件,并且您想要构建 helloworld.cpp
  2. 要运行在 tasks.json 中定义的构建任务,请按 Ctrl+Shift+B 或从终端主菜单中选择运行构建任务(Run Build Task)。
  3. 任务开始时,您应该会看到集成终端面板出现在源代码编辑器下方。 任务完成后,终端会显示编译器的输出,指示构建是成功还是失败。 对于成功的 g++ 构建,输出如下所示:
    终端显示
  4. 使用 + 按钮创建一个新终端,您将拥有一个以 helloworld 文件夹作为工作目录的新终端。 运行 dir,您现在应该会看到可执行文件 helloworld.exe终端显示
  5. 您可以通过键入 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 调试器。

  1. 从主菜单中,选择 Run > Add Configuration…,然后选择 C++ (GDB/LLDB)
  2. 然后,您将看到各种预定义调试配置的下拉列表。 选择 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设置一致。

开始调试对话

  1. 返回 helloworld.cpp 使其成为活动文件。
  2. F5 或从主菜单中选择 Run > Start Debugging。 在开始逐步执行源代码之前,让我们花点时间注意一下用户界面中的几个变化:
  • 集成终端将会在源代码编辑器的底部出现。 在“调试输出”选项卡中,您会看到指示调试器已启动并正在运行的输出。
  • 编辑器突出显示 main 方法中的第一条语句。 这是 C++ 扩展自动为您设置的断点:
    断点
  • 左侧的运行视图显示调试信息。 您将在本教程后面看到一个示例。
  • 在代码编辑器的顶部,会出现一个调试控制面板。 您可以通过抓住左侧的点在屏幕上移动它。

单步调试

现在您应该已准备好开始逐步执行代码。

  1. 单击或按调试控制面板中的Step over 图标。
    单步调试
    这会将程序执行推进到 for 循环的第一行,并跳过创建和初始化 msg 变量时调用的 vectorstring 类中的所有内部函数调用。 请注意左侧“变量”窗口中的更改。
  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

idk500

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值