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