调试:基础命令
当更多的代码积聚起来时,避免不了会出现错误。语法上的错误,如拼写错误、忘掉分号等,会在编译时被检测出来。调试用于解决程序运行时的逻辑错误。此外,以调试的方式运行程序,也可以帮助我们更好的理解程序流程与设计结构。在 Visual Studio 中,调试功能主要由调试菜单提供。建议快速浏览一下该单菜,大概知道有哪些命令,这里我们以下面的代码为例,讲解调试功能的使用。
#include <stdbool.h>
int img_id = 0; // 图像ID计数器
int pic1 = -1; // 保存第一张图像的id(-1表示无效图像标识)
int pic2 = -1; // 保存第二张图像的id
// 初始化游戏
bool game_init(int width, int height)
{
return true;
}
// 加载图片
int load_image()
{
return img_id++;
}
// 运行游戏
void game_run()
{
// 使用图像绘制游戏场景
pic1;
pic2;
}
int main()
{
if (!game_init(800, 600))
return false;
pic1 = load_image();
pic2 = load_image();
game_run();
return 0;
}
启用Debug模式
软件开发过程中,一般存在Debug与Release两种模式。Debug模式下的程序内部有大量的符号信息,这就是允许我们进行调试的内在原因之一。Release模式用于生成程序的最终发行版,比如从应用商店下载的程序;这种模式下的程序是经过优化处理的,与Debug版本相比更小更快。要使程序能够进入调试模式,就需要使用Debug工作模式,这可以通过工具栏来设置。

我们也可以打开【配置管理器】 进行设置,方法如下
- 在上图工具栏中展开的菜单里选择【配置管理器...】
- 通过【生成】菜单下的【配置管理器】命令。
- 在【解决方案资源管理器】视图中选中当前解决方案,右击选择【配置管理器】命令。

调试命令
F9 设置断点
断点是暂停程序执行的方式。假如我们要观察图像加载时pic1与pic2的值,只需要将光标定位在当前代码行,按下F9,此时代码行前面的操作区域出色红色的原点,表示断点设置成功。也可以单击对应代码行的操作区域(灰色区域)设置断点。再次按下F9或单击时,断点将被取消。

F5 启动调试
调试使我们可以介入程序运行流程的手段。通过【开始调试】命令就可以触发调试功能,其快捷键是F5。当启动调试后,窗口一闪而过,然后程序运行到当前断点行(行33),这表示我们拦截了程序的运行。这里你打开【调试】菜单,会发现【开始调试】命令变为了【继续】。
自动窗口
自动窗口用于观察程序运行上下文的一些信息,通过【调试】【窗口】【自动窗口】命令打开。这里你会看到pic1的值为-1,即我们设置的初始值。你也可以将鼠标指向变量pic1,旁边会弹出提示窗口,有简明的值信息,配图中显示了这两种情况。

继续
此时按下F5,这表示执行程序并跳转到下一个断点(如果有的话)。这里程序执行第一个load_image调用,然后暂停到下一个断点处,即34行。注意自动窗口中pic1的值已经发生了变化,并以红色突出显示,同时,新断点行涉及的变量也自动显示出了相关信息。

逐语句
如果你想一步步追踪程序的流程,比如观察load_image的执行过程,可以使用【逐语句 F11】命令。这样程序将进入load_image的定义的中,接下来你可以一行行观察程序的执行。如果一个函数中语句很多,而你已经得到了想要观察的信息,这时你可以使用【跳出 Shift+F11】命令。

停止调试 Shift+F5
当程序执行完main函数的时,调试过程将自动结束;如果你想随时停止调试过程,可以使用【停止调试 Shift+F5】命令。
练习
1 在示例的基础上扩展几个函数,多次练习函数跳转相关的调试方法。
2 调试上节课程中的示例,熟练基本命令的使用。
3 尝试发掘一下其它调试命令的使用。
陕公网安备61011202001108号