在 VSCode 中使用 GDB 进行 C/C++ 程序调试(图文版)

  • (꒪ꇴ꒪ ),Hello我是祐言QAQ
  • 我的博客主页:C/C++语言,数据结构,Linux基础,ARM开发板,网络编程等领域UP🌍
  • 快上🚘,一起学习,让我们成为一个强大的攻城狮!
  • 送给自己和读者的一句鸡汤🤔:集中起来的意志可以击穿顽石!
  • 作者水平很有限,如果发现错误,请在评论区指正,感谢🙏

引言

        在软件开发过程中,调试是不可或缺的一部分。C/C++ 开发者常常使用 GDB 进行调试,而在 Visual Studio Code中集成 GDB 可以提供一种高效、直观的调试体验。本文将为你详细介绍如何在 VS Code 中配置和使用 GDB 进行 C/C++ 调试,并解答一些常见问题。

一. 安装 VSCode 插件

        首先,确保你已经在 VSCode 中安装了 C/C++ 和 GDB Debug插件,如果没有安装,可以在 Extensions 视图(左侧四个方块)中搜索 "C/C++" 和“GDB Debug” 并分别进行安装(Install),该插件提供了强大的代码编辑和调试功能。

二. 配置 GDB

        在配置 GDB 之前,确保你已经安装了 GDB 调试器。然后,在 VSCode 中创建一个 launch.json 文件以配置调试环境。或者直接点击运行调试就会弹出配置该文件的提示。

        打开后默认长这样,当然是不行的,所以点击右下角的Add Configuration...

        然后选择你需要的类型:

   或者复制如下代码直接粘贴进去亦可:

{"version": "0.2.0","configurations": [{"name": "C++ Debug","type": "cppdbg","request": "launch","program": "${workspaceFolder}/your_executable", //${workspaceFolder}是路径除执行文件外其他"args": [],"stopAtEntry": false,"cwd": "${workspaceFolder}", //这里也一样"environment": [],        //环境有则需要配置,无则无需管"externalConsole": false,"MIMode": "gdb","setupCommands": [{"description": "Enable pretty-printing for gdb","text": "-enable-pretty-printing","ignoreFailures": true}],"preLaunchTask": "build"}]
}

        但要确保替换 "your_executable" 为你的可执行文件的路径。这个配置会告诉 VSCode 使用 GDB 进行调试。

三. 基本调试命令

在 VSCode 的调试视图中

        你可以使用一系列基本调试命令,如:

  • Breakpoints(break): 在源代码中设置断点,以便在程序执行到这些地方时停下来;
  • Run(F5): 启动程序;
  • Continue(continue): 恢复程序执行,直到下一个断点;
  • Step Into(F11): 逐行进入函数内部;
  • Step Over(F10): 逐行执行当前函数,不进入函数内部;
  • Step Out(Shift+F11) : 从当前函数中跳出,继续执行到函数返回的地方;
  • Stop(Shift+F5): 停1止调试;

终端使用命令行方式调试

        启动GDB的方式一般为: gdb <你的可执行文件名>,还有如下的几种:

1.调试core文件:
//用于调试一个运行程序和core文件,core文件是程序非法执行后core dump产生的文件
gdb <program> core  2.使用GDB “attach”到一个正在运行的服务程序上去,并调试它:
gdb <program> <PID>
或者:
gdb attach <PID>

        主要的步骤详细说明一下,其他的自己摸索一下就会了,具体步骤如下:

1.运行(毫无设置的run)

2. 设置断点(在运行之前设置)

        设置断点是调试的关键步骤之一。在源代码中点击行号旁边,或者通过命令行使用 break 命令设置断点(第十行),还可以在指定模块和函数前设置断点,禁用断点和删除断点等。

3. 逐行运行

        这里主要说一下step和next的区别:

  • step 命令: 逐行执行程序,进入函数内部;

  • next 命令: 逐过程执行程序,不进入函数内部。

4.backtrace 使用

        在GDB调试中,有时候会出现报错Segmentation fault,该报错是因为出现了内存错误,我们就可使用 backtrace 命令来追溯问题出在哪一步,当然这个问题一般出现时就会提示错误在哪一行,但我们可以通过该命令来回溯其之前调用的地方逐个检查问题,方便更快找出。

5. 常见错误解决        

       一般来说,配置好之后点击“运行和调试”,右上角就会出现该绿色三角,点击之后报错让你修改 launch.json 文件 那么说明你的该文件中存在语法上的错误或缺失某行,照着检查一下即可,一定要注意路径的/是否加全。

        在 VSCode 中,GDB 的集成提供了直观的调试工具。你可以查看变量、观察寄存器状态等。通过调试视图,你可以更轻松地导航和掌握程序执行的每个步骤。

        除了基本的调试命令外,GDB 还提供了一些高级技巧,如查看内存、观察程序状态等。深入了解这些功能可以帮助你更全面地调试代码。一般来说两种GDB使用方式配合调试是最好的,它们在不同的地方有各自的亮点和作用。

四、结语        

        通过本文的指南,希望将能够在 VSCode 中配置和使用 GDB 进行 C/C++ 程序的高效调试。调试是编程中的一项重要技能,善用调试工具可以提高代码质量,加速开发周期。

        更多C/C++语言Linux系统数据结构ARM板实战相关文章,关注专栏:

   手撕C语言

            玩转linux

                    脚踢数据结构

                            系统、网络编程

                                     探索C++

                                             6818(ARM)开发板实战

📢写在最后

  • 今天的分享就到这啦~
  • 觉得博主写的还不错的烦劳 一键三连喔~
  • 🎉🎉🎉感谢关注🎉🎉🎉

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/206067.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

left join查询耗时太慢,添加索引解决问题

背景 因为最近自己用的小app越用感觉加载越慢&#xff0c;以为是自己app开发逻辑出现问题了&#xff0c;结果才发现是自己很早以前的代码用到的是left join多表联查&#xff0c;以前因为数据少&#xff0c;所以没有感觉&#xff0c;现在数据量稍微一大&#xff0c;耗时就非常严…

AI的未来!Salesforce发布2024年全球科技的重要预测

Salesforce领导者处于影响企业的最新趋势、技术和挑战的前线&#xff0c;通过市场分析、客户对话等方面带来专业知识和洞察力。毫无疑问&#xff0c;人工智能是本年度的最热话题&#xff0c;Salesforce关于技术和人工智能的预测值得关注。 生成式AI改变商业未来的方式 01 生…

微信公众号上怎么做微信助力活动

微信公众号微信助力活动&#xff1a;一起分享&#xff0c;一起成长 在当今社交媒体时代&#xff0c;人们之间的互动和分享变得越来越重要。微信公众号作为一个广受欢迎的社交平台&#xff0c;为人们提供了一个便捷的分享和交流渠道。而微信助力活动则是通过分享和互动&#xf…

京东数据分析报告:2023年10月京东平台大家电销售数据汇总分析

10月份&#xff0c;大家电市场的销售数据已经新鲜出炉&#xff0c;大盘销售整体向好。 鲸参谋数据显示&#xff0c;今年10月&#xff0c;京东平台大家电市场的销量为400万&#xff0c;环比增长约10%&#xff1b;销售额将近87亿&#xff0c;环比增长约11%&#xff0c;同比涨幅不…

【追求卓越01】数据结构--数组

引导 这一章节开始&#xff0c;正式进入数据结构与算法的学习过程中。由简到难&#xff0c;先开始学习最基础的数据结构--数组。 我相信对于数组&#xff0c;大家肯定是不陌生&#xff0c;因为数组在大多数的语言中都有&#xff0c;也是大家在编程中常常会接触到的。我不会说数…

steam游戏找不到steam_api64.dll,分享三个有效的解决方法

在现代科技发展的时代&#xff0c;游戏已经成为了许多人生活中不可或缺的一部分。而Steam作为全球最大的数字发行平台之一&#xff0c;拥有着庞大的游戏库和活跃的用户群体。然而&#xff0c;在使用Steam时&#xff0c;有些用户可能会遇到Steam_api64.dll丢失的问题&#xff0c…

使用Echarts.js绘制多条折线图

一、页面效果 默认tab为不限&#xff0c;渲染多条折线&#xff1a; 切换tab&#xff0c;只渲染对应tab的一条折线&#xff1a; 二、功能描述 ​ 1、tab选中不限时&#xff0c;图表中同时渲染多条折线&#xff0c;对应多种类型的数据。 ​ 2、切换tab时&#xff0c;如果选中指…

日期格式转化成星期几部署到linux显示英文

异常收集 原因&#xff1a;解决办法仰天大笑出门去&#xff0c;我辈岂是蓬蒿人 传入一个时间获取这个时间对应的是星期几&#xff0c;在开发环境&#xff08;window系统&#xff09;中显示为星期几&#xff0c;部署到服务器&#xff08;linux系统&#xff09;中会显示英文的时间…

VR全景航拍要注意什么,航拍图片如何处理

引言: VR全景航拍技术是当前摄影和航拍领域的新潮流。它采用虚拟现实技术&#xff0c;通过360度全景镜头捕捉画面&#xff0c;可以为观众提供身临其境的视觉体验。在宣传展示中&#xff0c;利用VR全景航拍技术可以为品牌宣传带来更加生动、震撼的视觉效果。 一、航拍注意事项 …

OOM问题排查+Jvm优化

OOM问题排查&#xff1a; 1、top命令&#xff1a;查看cpu和内存的使用情况。 2、jstat命令&#xff1a;查看YGC和FGC情况&#xff0c;一般都是老年代不够用。导致OOM 3、jmap命令&#xff1a; 查看哪个类的实例过多,以每个类占用多少了内存。4、jstack 查看线程与线程之间的阻…

iEnglish全国ETP大赛:教育游戏助力英语习得

“seesaw,abacus,sword,feather,frog,lion,mouse……”11月18日,经过3局的激烈较量,“以过客之名队”的胡玲、黄长翔、林家慷率先晋级“玩转英语,用iEnglish”第三届全国ETP大赛的16强,在过去的周末中,还有TIK徘徊者队、不负昭华队、温柔杀戮者队先后晋级。据悉,根据活动规则,在…

验证码 | 可视化一键管控各场景下的风险数据

目录 查看今日验证数据 查看未来趋势数据 验证码作为人机交互界面经常出现的关键要素&#xff0c;是身份核验、防范风险、数据反爬的重要组成部分&#xff0c;广泛应用网站、App上&#xff0c;在注册、登录、交易、交互等各类场景中发挥着巨大作用&#xff0c;具有真人识别、身…