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

目录

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),结果如下图所示:

  • 19
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Thanks_ks

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

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

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

打赏作者

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

抵扣说明:

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

余额充值