10 VS Code 调试技巧之逐断点、逐过程、单步调试与单步跳出

news2024/9/21 16:48:50

目录

1 断点调试

1.1 断点调试介绍

1.2 如何设置断点

1.3 如何开启调试       

2 调试类型

2.1 逐断点调试

2.2 逐过程调试

2.3 单步调试

2.4 单步跳出


1 断点调试

        遇到难以捉摸的软件错误时,老练的程序员会推荐断点调试。通过设置断点,逐步跟踪程序执行,实时查看变量状态,轻松定位并揭露错误根源。这一技巧如同放大镜,让隐藏的问题无所遁形,确保软件质量。

1.1 断点调试介绍

        断点调试是一种强大的程序调试技术,它允许开发者在程序的特定行设置一个“断点”当程序执行到这些预设的断点时,会自动暂停运行。这一机制使得开发者能够逐步(单步执行)跟踪程序的执行流程,同时实时查看和检查程序中各个变量的当前值。如果在调试过程中遇到错误或异常,程序会在出错的具体代码行停止,直接指向问题所在,从而大大简化了错误定位和问题分析的过程。通过这种方式,开发者可以更加高效地识别和解决程序中的 Bug,优化代码质量,提升程序的稳定性和性能。

1.2 如何设置断点

        在代码行号的前面单击即可添加断点,再次点击可以取消断点; 或者使用快捷键 F9(vscode),会给光标所在行添加或取消断点。

1.3 如何开启调试       

        点击如下图所示的按钮开启调试模式:

        启动调试之后,当程序执行到这些预设的断点时,会自动暂停运行,断点所在行表示该行还未得到执行,等待开发者进一步的操作指令,如下图所示:


2 调试类型

        在 VS Code 中,调试可分为逐断点(继续 F5)逐过程(F10)、单步调试(F11)、单步跳出(Shift + F11),我将以下面这个程序进行各种调试方法的讲解:

#include <stdio.h>

// 定义一个函数,它接受一个整型参数 x,并打印出 x 的两倍
void myFunction(int x)
{
    int y = x * 2;                            // 计算 x 的两倍,并将结果存储在 y 中
    printf("Inside myFunction, y = %d\n", y); // 打印 y 的值
}

int main()
{
    int a = 5;

    printf("Before calling myFunction\n"); // 在调用 myFunction 之前打印一条消息,此行打断点
    printf("Before calling myFunction\n"); // 在调用 myFunction 之前打印一条消息
    printf("Before calling myFunction\n"); // 在调用 myFunction 之前打印一条消息
    printf("Before calling myFunction\n"); // 在调用 myFunction 之前打印一条消息
    printf("Before calling myFunction\n"); // 在调用 myFunction 之前打印一条消息,此行打断点

    // 可以通过逐步调试进入 myFunction 内部,或者直接执行过这个函数
    myFunction(a); // 此行打断点

    printf("After calling myFunction\n"); // 在调用 myFunction 之后打印一条消息,此行打断点

    // 可以在这里设置第二个断点,用于演示继续(Continue)的功能
    // 当你从第一个断点继续执行到此处并再次暂停时,可以选择继续执行直到程序结束

    return 0;
}

        断点的位置在程序中进行了注释说明,详情可见下图:

2.1 逐断点调试

        功能:逐断点调试(继续调试,F5)操作会在当前断点处启动或恢复程序的执行,直到遇到下一个断点或程序正常结束。如果当前没有断点或者后续没有断点,程序将直接执行到结束。

        使用场景:当你已经检查过当前断点处的代码,并希望继续执行到下一个断点以查看后续代码的执行情况时,可以使用继续调试。

        操作演示:程序调试的初始状态如上图所示,下面点击继续按钮(快捷键 F5),结果如下图所示:

2.2 逐过程调试

        功能:逐过程调试(F10)是从断点开始逐行执行代码,执行一条语句就暂停一次,但如果当前行包含函数调用,调试器将不会进入该函数内部,而是直接执行该函数并跳转到下一行代码。这种方式适用于不需要深入函数内部细节,只关心函数返回结果或外部影响的场景。

        使用场景:当你想要快速遍历代码,跳过不感兴趣的函数内部实现时,可以使用逐过程调试。

        操作演示:程序调试的初始状态如上文所示,下面点击逐过程按钮,结果如下图所示:

2.3 单步调试

        功能:单步调试(F11)允许你逐行执行代码,并且在遇到函数调用时,会进入该函数内部进行逐行调试。这种方式适用于你需要深入函数内部,查看其执行过程和变量状态的情况。

        使用场景:当你需要详细了解函数内部逻辑,或者排查函数内部可能存在的问题时,可以使用单步调试。

         操作演示1:程序调试的初始状态如下所示:

        下面点击单步调试按钮(快捷键 F11),结果如下图所示:

        操作演示2:程序调试的初始状态如下所示:

        下面点击单步调试按钮(快捷键 F11),结果如下图所示:

2.4 单步跳出

        功能:单步跳出(Shift + F11)操作在你已经使用单步调试进入函数内部后,允许你退出当前函数,并继续执行函数外部的代码。这将使程序执行到当前函数的返回语句,并返回到函数被调用的地方。

        使用场景:当你已经完成了对函数内部逻辑的调试,并希望继续执行函数外部的代码时,可以使用单步跳出。

        操作演示:程序调试的初始状态如下所示:

        下面点击单步跳出按钮(快捷键 Shift + F11),结果如下图所示:

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

nvidia jetson 系列开发板交叉编译方法,CUDA依赖程序

资源 Toolchain Information jetson-linux jetpack 文章目录 资源1 方案1 qemu-aarch64-static和docker 容器编译jetson2 方案2 模拟器交叉编译器2.1 应对库缺失的情况&#xff0c;进行环境准备2.1.1 模拟器(方案1)2.1.2 在jetson上面进行安装&#xff08;方案2&#xff09;2.…

如何有效清理宝塔控制面板中的垃圾文件与优化系统性能

宝塔控制面板&#xff08;BT-Panel&#xff09;作为一款流行的服务器管理软件&#xff0c;极大地简化了Linux服务器的管理任务&#xff0c;包括网站部署、数据库管理、文件操作等。然而&#xff0c;随着服务器运行时间的增长&#xff0c;系统中会积累各种临时文件、日志文件、缓…

STM32G474按钮输入和点灯

在获取到工程模板后&#xff0c;学习某个CPU的第一步通常都是IO口操作。因此按钮输入和点灯&#xff0c;就是本次学习的第一个程序。先从简单入手。 和GPIO操作有关的函数如下: __HAL_RCC_GPIOA_CLK_ENABLE();//使能GPIOA时钟 __HAL_RCC_GPIOB_CLK_ENABLE();//使能GPIOB时钟 _…

Redis7基础篇(四)

Redis管道 引入 set k1 v1.......需要往返三次 这是一个比较消耗性能的一件事情 怎么就可以一次性的将这些命令执行 就是使用mset这个方法 这个mset就相当于一个管道 把这些命令做成一个流水线的形式进行处理 解决思路 案例 两个set类型的三个哈希类型的一个list类型的 我们要…

知乎信息流广告效果如何?与其他信息流广告平台有何区别?

广告的有效触达与高效转化成为了品牌营销的核心挑战&#xff0c;知乎作为国内最大的知识分享平台&#xff0c;其信息流广告以其独特的优势脱颖而出&#xff0c;成为众多企业首选的营销工具&#xff0c;云衔科技助力企业实现高效知乎广告投放与代运营服务。 一、知乎信息流广告…

基于STM32+手机APP设计的智能停车场系统——程序源码原理图设计原理设计文档演示视频框图等(文末工程资料下载)

基于STM32手机APP设计的智能停车场系统 演示视频 基于STM32手机APP设计的智能停车场系统 元器件&#xff1a;DHT11、MQ2、STM32F103C8T6、SG90舵机、RC522频射模块、HC-SR04超声波模块、OLED、wifi模块、LED灯、蜂鸣器 功能简介 1、进出停车场时需要刷卡&#xff0c;进行一个…

深度学习-----------------------含并行连结的网络GoogLeNet

目录 含并行连结的网络GoogLeNet最好的卷积层超参数inception块inception 结构inception原始结构inception 降维11卷积核的降维功能GoogLeNet段1&2段3段4&5 Inception 的各种变种Inception V3块&#xff0c;段3Inception V3块&#xff0c;段4Inception V3块&#xff0…

突破FPGA限制:TS-M4i系列数字化仪利用GPU加速实现高效块平均处理

一、应用背景 块或分段内存平均模式常用于在不同应用当中&#xff0c;移除信号中不相干的噪声。不管是哪家的数字化仪制造商&#xff0c;几乎所有基于FPGA实现的块平均模式都会受到块或者段内存大小的限。该限制一般取决于FPGA的容量&#xff0c;最大样品量通常在32k到500k之间…

RS232(旧协议)与RS485(新协议)

RS232: RS485: RS485和RS232是两种常见的串行通信标准&#xff0c;它们在通信距离、速度、拓扑结构等方面存在显著差异。以下是它们的主要区别&#xff1a; 1. 物理层接口 RS232: 使用单端信号传输&#xff0c;即信号通过一根信号线和一根公共地线&#xff08;GND&#xff09…

外呼触发通知发送闪信(mod_cti基于FreeSWITCH)

文章目录 前言联系我们手动外呼配置方法例子一&#xff1a;接收到180或183时触发闪信发送例子二&#xff1a;挂断后触发闪信发送 自动外呼配置方法例子&#xff1a;接收到180或183时触发闪信发送 前言 在呼叫中心中间件中&#xff0c;自动外呼触发闪信发送&#xff0c;我们可以…

电销机器人引领电销变革

以前电销都是都是通过盲打&#xff0c;现在有了电话机器人的出现&#xff0c;为电销公司带来新的篇章。 我们都知道外呼中心的人员离职率始终居高不下&#xff0c;人员的培训频繁成本很高&#xff0c;外部电话水平参差不齐&#xff0c;服务态度不够稳定等问题&#xff0c;都是难…

【硬件模块】震动传感器模块

震动传感器模块实物图 DO&#xff1a;数字信号量输出&#xff0c;接单片机管脚&#xff1b; AO&#xff1a;模拟输出&#xff0c;无效&#xff0c;一般不接。 无震动&#xff0c;DO输出高电平&#xff0c;信号指示灯灭&#xff1b; 有震动&#xff0c;DO输出低电平&#xff0c;…

50道深度NLP和人工智能领域面试题+答案

编者按&#xff1a;分享一个很硬核的免费人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c; 可以当故事来看&#xff0c;轻松学习。 什么是自然语言处理&#xff08;NLP&#xff09;&#xff1f;自然语言处理是一种人工智能领域&#xff0c;致力于使计算机…

letcode 分类练习 BST 530.二叉搜索树的最小绝对差 501.二叉搜索树中的众数 236. 二叉树的最近公共祖先(自底向上的典型例子)

letcode 分类练习 BST 530.二叉搜索树的最小绝对差 501.二叉搜索树中的众数 236. 二叉树的最近公共祖先 BST530.二叉搜索树的最小绝对差501.二叉搜索树中的众数236. 二叉树的最近公共祖先 BST 重要性质&#xff1a;它的中序遍历是一个有序数组 530.二叉搜索树的最小绝对差 BS…

linux 远程访问及控制 (SSH)

目录 一、SSH远程管理 1.1 配置OpenSSH服务端 1.1.1 SSH协议介绍 1.1.2 服务监听选项 1.1.3 用户登录控制 1.1.4 登录验证方式 1.2 使用SSH客户端程序 1.3 密钥对验证的SSH体系 二、TCP Wrapppers访问控制 2.1 TCP Wrappers概述 2.1.1 TCP Wrappers简介 2.1.2 TCP…

会声会影2023安装好后运行显示乱码的解决方法

会声会影2019安装好了之后&#xff0c;打开软件之后&#xff0c;会有个乱码弹窗错误&#xff0c;其实这个乱码提示只有简体中文版本上才会是乱码&#xff0c; 英文版上显示的是″You do not appear to be a register user. Please re-install the application or call custome…

如何像演示PPT幻灯片一样演示PDF文件 - PDF幻灯片使用说明

PDF幻灯片是一款Windows平台下可以让您像演示PPT幻灯片一样全屏演示PDF文件的放映工具软件。 在我们日常工作中&#xff0c;许多幻灯片文件被转换成了PDF格式。这些由幻灯片生成的PDF文件只能被打开查看内容&#xff0c;但是却不能像原始PPT或PPTX文件一样直接用PowerPoint等软…

常量池梳理

参考资料&#xff1a; 参考视频 参考demo 参考博客 说明&#xff1a; 详情见参考demo的文件夹&#xff1a;

JS逆向高阶补充

文章目录 JS逆向高阶补充eval函数Hook函数案例1: Hook eval案例2: Hook JSON.stringify案例3: Hook JSON.parse案例4: Hook Cookie Promise对象&#xff08;1&#xff09;回调函数&#xff08;2&#xff09;基本语法&#xff08;3&#xff09;then函数&#xff08;4&#xff09…

wireShark tcpdump 抓包 ,检测dns

开两个窗口执行 1窗口。tcpdump -i any port 53 -w clirent.pcap2窗口。nslookup ip 过滤目标ip or 域名 统计域名DNS 将 生成的 clirent.pcap使用wireshark 分析 1.queryType : A ipv4 AAAAipv6