c++ gdb 绑定源码_Windows平台搭建C/C++开发环境之Visual Studio Code调试入门

5cea60ae4fcdc2936332d5c5f3085a02.png

前言

本系列第一篇已经对 Dev-C++ 集成开发环境进行了分享介绍。

本系列第二篇已经对 Code::Blocks 集成开发环境进行了分享介绍。

本系列第三篇已经对基于MinGW-w64构建C/C++语言基础开发环境进行了分享介绍。

本系列第四篇已经对Windows平台基于MinGW-w64 + Visual Studio Code+ Microsoft C/C++扩展构建C/C++语言组合集成开发环境进行了分享介绍。

本文接着补充本系列第四篇对利用Visual Studio Code进行调试入门进行介绍。

本次分享内容的目录如下:

前言

创建源码文件

调试配置

代码调试入门(启动调试会话、调试控制面板介绍、设置断点、设置监视、执行调试)

结束语


1. 创建源码文件

前提:利用本系列第四篇文章中已经创建的工作区(如C:MyCodeVSCodeWS)、已经配置好的Microsoft C/C++扩展(如c_cpp_properties.json文件)。

为了便于调试,在工作区下创建新的源码文件(如:C:MyCodeVSCodeWSest.c)

#include int main(void){    int num = 5;    int fact = 1;    for(int i=1; i<=num; i++) {        fact = fact * i;    }    printf("%d! = %d", num, num, fact);    return 0;}

2. 调试配置

接下来我们来配置Visual Studio Code,以实现在按F5键时启动GCC调试器(gdb.exe)。

Step1:按快捷键Ctrl+Shift+P打开命令面板,输入“launch”,然后从建议列表中选择“ 调试:打开launch.json“。

f8503c7a7b16235cca988fb026b86b8f.png

Step2:然后从新的建议列表中选择“ C++(GDB/LLDB)“环境。

78fa0d568258fe2b6e136b52e484edfc.png

Step3:然后从新的建议列表中选择“ gcc.exe - 生成和调试活动文件“。

e2752584e29931598de83fdc964aafe0.png

Step4:此时Visual Studio Code会在工作区.vscode目录下创建一个的launch.json文件(指定了调试信息),并在代码编辑器中将其打开。

6d35a4a03328225dd7e8331f18c250d0.png

launch.json文件

launch.json文件中相关参数说明如下:

  • "name":用于配置本调试名称(将会在启动配置的下拉菜单中显示),按给出的默认值即可。
  • "type":用于指示调试器类型(该值自动生成),Windows使用cppvsgbdGDBLLDB使用cppdbg
  • "request":用于指示调试方式,可以是launch(启动)或attach(附加),按给出的默认值launch即可。
  • "program":用于指示将要进行调试程序的路径及文件名(完整路径),按给出的默认值即可。
  • "args":用于给程序调试时传递上面程序的命令行参数,如果不涉及程序运行时输入参数,则按给出的默认值(空)即可。
  • "stopAtEntry":用于指示调试器是否应该在目标的入口点停止,按给出的默认值(false)即可。
  • "cwd":用于指示调试程序时的工作目录,按给出的默认值(${workspaceFolder})即可。
  • "environment":用于针对调试的程序要添加到环境中的环境变量,按给出的默认值(空)即可。
  • "externalConsole":用于指示调试时是否开启新的终端执行程序,false表示使用内置终端,true表示开启新的终端。
  • "MIMode":用于指示要使用的调试工具,如gdb
  • "miDebuggerPath":用于指示调试器路径,该值必须设置正确,如C:Developmingw64bingdb.exe
  • "setupCommands":按给出的默认值即可。
  • "preLaunchTask":用于指示调试会话前执行的任务,按给出的默认值即可。

另外再介绍一个launch.json文件中没出现的一个参数logging:用于确定应将哪些类型的消息记录到调试控制台中。

  • exceptions:用于确定异常消息是否应记录到调试控制台的可选标志,默认为true
  • moduleLoad:用于确定模块加载事件是否应记录到调试控制台的可选标志,默认为true
  • programOutput:用于确定程序输出是否应记录到调试控制台的可选标志,默认为true
  • engineLogging:用于确定诊断引擎日志是否应记录到调试控制台的可选标志,默认为false
  • trace:用于是否应将诊断适配器命令跟踪记录到调试控制台的可选标志,默认为false
  • traceResponse:用于确定是否应将诊断适配器命令和响应跟踪记录到调试控制台的可选标志,默认为false

3. 代码调试入门

3.1 启动调试会话

调试配置完成后,就可以开始进入调试环节了。

Step1:在左侧的资源管理器中选中待调试的源码文件(如:test.c),然后按快捷键F5 或 执行主菜单栏【运行】下的【启动调试】子菜单项,开始启动调试会话。

Step2:可以看到整个Visual Studio Code软件界面发生了变化(如下图示)

4c14534a96e6396b2d51b057de87c8a1.png

调试界面

  • 变化1:在代码编辑器顶部(图示标号1处),将增加显示一个“调试控制面板”(可以通过抓住左侧的点在屏幕上移动它)。
  • 变化2:在窗体左侧(图示标号2处),显示调试信息(如变量区域、监视区域、调用堆栈区域、断点区域)。
  • 变化3:在代码编辑器出现醒目标识的代码行(图示标号3处)。
  • 变化4:在代码编辑器底部出现【集成终端】(图示标号4处),可以看到相关信息(编译信息、等待输入以及程序输出信息)。
 Microsoft Windows [版版本本 6.1.7601] 版版权权所所有有 (c) 2009 Microsoft Corporation。。保保留留所所有有权权利利。。  C:MyCodeVSCodeWS> cmd /C "c:甥敳獲jiangsu.vscodeextensionsms-vscode.cpptoo ls-0.30.0-insiders2debugAdaptersbinWindowsDebugLauncher.exe --stdin=Microsoft -MIEngine-In-apazkxkw.epn --stdout=Microsoft-MIEngine-Out-etzghazt.nff --stderr= Microsoft-MIEngine-Error-fw4aiqep.ya1 --pid=Microsoft-MIEngine-Pid-qcxqmacb.ucz --dbgExe=C:DevelopMinGW64bingdb.exe --interpreter=mi "
  • 变化5:在代码编辑器底部出现【调试控制台】(图示标号5处),可以看到指示调试器已经启动并正在运行输出相关信息。
  • 变化6:在窗体最底部的状态栏(图示标号6处)显示调试状态。

3.2 调试控制面板介绍

e80fcfb8b963ba5d07b9e2ae1f8dd07c.png

调试控制面板

下面对“调试控制面板”上的6个按钮按从左到右顺序逐一进行介绍:

704fbc887501a576cf5e3725826bad4f.png

3.3 设置断点

可以在Visual Studio Code软件中设置断点来进行协助调试。可以通过菜单栏【运行】下的【新建断点】子菜单项下的4个子菜单项来创建四类断点:条件断点、内联断点、函数断点和记录点。

一、设置断点方法:

Step1:在代码编辑器中将插入点放在对应代码行;

Step2:然后按快捷键F9或菜单栏【运行】下的【切换断点】子菜单项,会看到在左侧的装订线中出现了一个红点,指示已在此行上设置断点。

Step3:类似Step1Step2完成其他代码行断点设置。

例下图中给代码第8行、第10行设置了2处调试断点:

7da68ff6d26960ca22ac08d26cea4c5a.png

设置断点

注:每次新设置断点后,会在主窗体左侧的最下方【断点区域】看到已经设置断点的对应文件代码行号。

二、取消断点方法:

方法同设置断点,再次按下快捷键F9或菜单栏【运行】下的【切换断点】子菜单项,即可取消已经设置的断点。

注:每次取消已设置的断点后,在主窗体左侧的最下方【断点区域】能看到会同步取消已经取消断点的对应文件代码行号。

三、可以启用、禁用或删除所有已经创建的断点。

3.4 设置监视

可以在主窗体左侧的【监视区域】通过在变量上设置观测点来实现在程序执行时跟踪具体表达式的变化。

如希望在【监视区域】能实时看到变量 ifact 值的变化情况,可以通过如下操作步骤实现:

Step1:将插入点放在循环内。在【 监视区域】中,单击加号+添加要监视的表达式,如ifact等。

126c5e7c886ad58739d52bdc534b092f.png

添加监视表达式

Step2:然后逐步执行代码,此时请注意观察【监视区域】各变量值的变化情况。如执行了一次【单步调试】后的值情况如下:

b47af453f523df9b0202c10fdecf930e.png

执行一次单步调试后的监视表达式值

Step3:要在断点处暂停执行时快速查看任何变量的值,只需用鼠标指针悬停在变量上即可。

d0aaa7d6422b8fe7d4f889fd7b47a2f0.png

悬停查看变量值

3.5 执行调试

常规执行调试步骤参考如下:

Step1:按F9执行【切换断点】设置断点。

一般会在要进行调试的自定义变量或自定义函数处,设置断点(断点数目可根据需要设置多个)。

Step2:按F5执行【启动调试】

此时代码编辑器中会直接定位到第一处断点(第8行,有醒目提示)

e55d3785fa5b1b68411cc3b57c4fcafe.png

注:如果代码没有设置断点,且不存在需要交互输入的情况,按【继续】按钮后将会一次执行完所有代码,并在【集成终端】选项卡中输出相应结果。

Step3-1:按F5执行【继续调试】,会执行到第二处断点(第10行);再次按【继续】按钮后,会完成本次代码执行,并在【集成终端】输出相应结果。

b5a2c80d069d7bd8bad7a0b001a177db.png

注:在【调试控制台】选项卡中可以看到GDB输出的诊断信息。

Step3-2:按F10执行【单步跳过】

执行【单步跳过】会跳过本次不执行的代码,同时在主窗体左侧【变量区域】和【监视区域】可以看到各个变量值和表达式的变化。

d2a280a4f6b86d3fd08ed787b3a7b9e0.png

注:若当前语句内包括函数且函数内设置断点,则会跳到函数内部断点处。

Step3-2:按F11执行【单步调试】

如果当前代码语句中包含函数,想看更详细的调试信息,则执行单步调试进入函数内部。然后可以根据需要执行其他调试操作。

Step3-4:按Shift + F11执行【单步跳出】

如果不想执行函数内部的语句,则可以执行单步跳出直接跳出当前函数,返回到调用源。然后可以根据需要执行其他调试等操作。

注1:在执行Step3-1Step3-2Step3-3Step3-4步骤后,按钮后,注意观察主窗体左侧的【变量区域】的相关变量值、【监视区域】的相关监视表达式、【调用堆栈区域】、【断点区域】的实时变化。

注2:在【调试控制台】选项卡中可以看到GDB输出的诊断信息。

Step3-5:在代码执行过程中,可以随时按【重启】按钮,重启开启调试对话,返回到Step1

Step3-6:在代码执行过程中,可以随时按【停止】按钮,以结束本次代码调试。

3.6 GDB调试

也可以在【调试控制台】选项卡窗口执行GDB命令调试。

本文不在此进行介绍,感兴趣的朋友们请参阅GDB官网(https://www.gnu.org/software/gdb/)。


结束语

相信各位 C 语言初学者们阅读完本文后,应该已经对如何在Window平台利用Visual Studio Code来对C/C++语言程序进行调试有了一个基本的了解掌握,接下来就可以再次进入到 C 语言的学习应用环节了。

希望本文能对您有所帮助!喜欢的话就点个赞加关注支持一下哈:)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值