调试:基础命令

当更多的代码积聚起来时,避免不了会出现错误。语法上的错误,如拼写错误、忘掉分号等,会在编译时被检测出来。调试用于解决程序运行时的逻辑错误。此外,以调试的方式运行程序,也可以帮助我们更好的理解程序流程与设计结构。在 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工作模式,这可以通过工具栏来设置。

glimix.com

我们也可以打开【配置管理器】 进行设置,方法如下

glimix.com

调试命令

F9 设置断点

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

glimix.com

F5 启动调试

调试使我们可以介入程序运行流程的手段。通过【开始调试】命令就可以触发调试功能,其快捷键是F5。当启动调试后,窗口一闪而过,然后程序运行到当前断点行(行33),这表示我们拦截了程序的运行。这里你打开【调试】菜单,会发现【开始调试】命令变为了【继续】。

自动窗口

自动窗口用于观察程序运行上下文的一些信息,通过【调试】【窗口】【自动窗口】命令打开。这里你会看到pic1的值为-1,即我们设置的初始值。你也可以将鼠标指向变量pic1,旁边会弹出提示窗口,有简明的值信息,配图中显示了这两种情况。

glimix.com

继续

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

glimix.com

逐语句

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

glimix.com

停止调试 Shift+F5

当程序执行完main函数的时,调试过程将自动结束;如果你想随时停止调试过程,可以使用【停止调试 Shift+F5】命令。

练习

1 在示例的基础上扩展几个函数,多次练习函数跳转相关的调试方法。

2 调试上节课程中的示例,熟练基本命令的使用。

3 尝试发掘一下其它调试命令的使用。

陕ICP备2025078817号-1 陕公网安备61011202001108号