前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >VsCode配置gdb(首次成功)

VsCode配置gdb(首次成功)

作者头像
云深无际
发布2020-11-03 10:29:21
13.3K1
发布2020-11-03 10:29:21
举报
文章被收录于专栏:云深之无迹

发现Ctrl+F1

首先看一下是不是环境变量被配置好了

接着运行一串命令,建立这样的文件目录

.vscode在工作区的文件夹中创建的三个文件:

  • tasks.json (制作说明)
  • launch.json (调试器设置)
  • c_cpp_properties.json (编译器路径和IntelliSense设置)

Ctrl+S是对当前文件保存

ctrl+k(然后s)对当前所有的文件保存

或者开启自动保存文件

可以按Tab键插入选定的成员。然后,当您添加左括号时,您将看到有关函数所需的任何参数的信息。

编译helloworld.cpp #

接下来,您将创建一个tasks.json文件来告诉VS Code如何构建(编译)程序。该任务将调用g ++编译器以基于源代码创建可执行文件。

从主菜单中,选择Terminal > Configure Default Build Task。在下拉列表中,将显示任务下拉列表,其中列出了C ++编译器的各种预定义构建任务。选择g ++。exe构建活动文件,该文件将构建编辑器中当前显示(活动)的文件。

点这里配置任务

点这地方

该command设置指定要运行的程序;在这种情况下是g ++。该args数组指定将传递给g ++的命令行参数。必须按照编译器期望的顺序指定这些参数。该任务告诉g ++获取活动文件({file}),对其进行编译,然后在当前目录({fileDirname})中创建一个与活动文件同名但.exe扩展名为(

该label值就是您将在任务列表中看到的值;您可以随意命名。

对象中的"isDefault": true值group指定当您按Ctrl + Shift + B时将运行此任务。此属性仅出于方便起见;如果将其设置为false,您仍然可以使用“任务:运行构建任务”从“终端”菜单运行它

Ctrl + Shift + B

这个大纲有点好看

编译成功

Ctrl + Shift + B

生成了文件

打印的结果

修改task.json #

您可以tasks.json使用"{fileDirname}\\{fileBasenameNoExtension}.exe"为硬编码的文件名(例如"

调试helloworld.cpp #

接下来,您将创建一个launch.json文件,以配置VS Code以在按F5调试程序时启动GDB调试器。

  1. 从主菜单中,选择“运行” >“添加配置...”,然后选择“ C ++(GDB / LLDB)”。
  2. 然后,您将看到各种预定义调试配置的下拉列表。选择g ++。exe构建并调试活动文件。

该program设置指定要调试的程序。在这里,它被设置为活动文件文件夹{fileDirname}和.exe扩展名的活动文件名{fileBasenameNoExtension}.exe,如果helloworld.cpp是,则为活动文件helloworld.exe。

默认情况下,C ++扩展名不会在源代码中添加任何断点,并且其stopAtEntry值设置为false

stopAtEntry值更改true为会导致调试器main在启动调试时在该方法上停止。

注意:该preLaunchTask设置用于指定启动前要执行的任务。确保它与task.json文件label设置一致。

该program设置指定要调试的程序。在这里,它被设置为活动文件文件夹{fileDirname}和.exe扩展名的活动文件名{fileBasenameNoExtension}.exe,如果helloworld.cpp是,则为活动文件helloworld.exe。

默认情况下,C ++扩展名不会在源代码中添加任何断点,并且其stopAtEntry值设置为false

stopAtEntry值更改true为会导致调试器main在启动调试时在该方法上停止。

注意:该preLaunchTask设置用于指定启动前要执行的任务。确保它与task.json文件label设置一致。

报错了

调试器的路径不对

然后加路径

需要加个\

接着F5键

可以单步执行

跳进for循环

这会将程序执行推进到for循环的第一行,并跳过在创建和初始化变量时调用的vectorstring类内的所有内部函数调用msg。注意左侧“变量”窗口中的更改。

在这种情况下,将出现错误,因为尽管调试器现在可以看到循环的变量名,但该语句尚未执行,因此此时无任何内容可读取。的内容msg是可见的,但是,因为该声明已完成。

这个按钮可以关闭所有的断点

F9

再次按Step over前进到该程序中的下一条语句(跳过为初始化循环而执行的所有内部代码)。现在,“变量”窗口显示有关循环变量的信息。

如果愿意,可以继续按Step over,直到将引导程序中的所有单词都打印到控制台为止。但是,如果您感到好奇,请尝试按“跳入”按钮以逐步浏览C ++标准库中的源代码!

要返回自己的代码,一种方法是按住“跳过”。另一种方法是通过helloworld.cpp在代码编辑器中切换到选项卡,将插入点放在cout循环内的语句中的某个位置,然后按F9来在代码中设置断点。在左侧的装订线中出现一个红点,指示已在此行上设置断点。

希望在程序执行时跟踪变量的值。您可以通过在变量上设置监视来做到这一点。

  1. 将插入点放在循环内。在“监视”窗口中,单击加号,然后在文本框中键入word,这是循环变量的名称。现在,当您逐步执行循环时,请查看“监视”窗口。

编译器的路径#

该扩展名使用该compilerPath设置来推断C ++标准库头文件的路径。当扩展知道在哪里可以找到这些文件时,它可以提供诸如智能补全和“转到定义”导航之类的功能。

C / C ++扩展尝试compilerPath根据在系统上找到的内容使用默认的编译器位置进行填充。该扩展在几个常见的编译器位置中查找。

compilerPath搜索顺序是:

  • 首先检查Microsoft Visual C ++编译器
  • 然后在Windows Subsystem for Linux(WSL)上寻找g ++
  • 然后是用于Mingw-w64的g ++。

转到定义

看头文件的路径

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-10-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云深之无迹 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 编译helloworld.cpp #
    • 修改task.json #
    • 调试helloworld.cpp #
      • 编译器的路径#
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档