快速入门:使用 Visual Studio 调试器通过C++进行调试

Visual Studio 调试器提供了许多强大的功能来帮助你调试应用。 本主题提供了一种快速了解一些基本功能的方法。

创建新项目

  1. 打开 Visual Studio 并创建项目。

    如果“开始”窗口尚未打开,请选择“ 文件 > 启动窗口”。 在“开始”窗口中,选择 创建新项目。 在搜索框中,键入“空项目”,然后选择C++ 空项目 模板。

    如果未看到项目模板,请打开 Visual Studio 安装程序。 选择 具有C++工作负载的桌面开发,然后选择 “修改”。

    Visual Studio 创建项目。

    创建名为 的新源文件 MyDbgApp.cpp

  2. 在MyDbgApp.cpp中,替换以下代码

    int main()
    {
        return 0;
    }
    

    使用此代码(请勿删除 #include "stdafx.h"):

    #include <list>
    #include <iostream>
    
    using namespace std;
    
    void doWork()
    {
        list <int> c1;
    
        c1.push_back(10);
        c1.push_back(20);
    
        const list <int> c2 = c1;
        const int &i = c2.front();
        const int &j = c2.front();
        cout << "The first element is " << i << endl;
        cout << "The second element is " << j << endl;
    
    }
    
    int main()
    {
        doWork();
    }
    

设置断点

断点是一个标记,指示 Visual Studio 应在哪里暂停正在运行的代码,以便你可以检查变量的值、内存的行为,或者确定代码的某个分支是否被执行。 这是调试中最基本的功能。

  1. 若要设置断点,请单击函数调用左侧的 doWork 边栏(或选择代码行并按 F9)。

    设置断点

  2. 现在按 F5 (或选择 “调试 > 开始调试”)。

    命中断点

    调试器会在设置断点的位置暂停。 调试器和应用执行暂停的语句由黄色箭头指示。 函数 doWork 调用的行尚未执行。

    小提示

    如果循环或递归中存在断点,或者如果有许多频繁单步执行的断点,请使用条件断点以确保代码仅在满足特定条件时挂起。 条件断点可以节省时间,还可以更容易地调试难以重现的问题。

    尝试调试C++中与内存相关的故障时,还可以使用断点检查地址值(查找 NULL)和引用计数。

有不同的命令指示调试器继续。 我们展示了一个有用的代码导航命令,从 Visual Studio 2017 开始提供。

在断点处暂停时,将鼠标悬停在语句c1.push_back(20)上,直到绿色的运行到单击按钮Run to Click出现,然后按下运行到单击按钮。

运行到单击处

应用将继续执行,调用 doWork,并于你在其中单击按钮的代码行上暂停。

用于单步执行代码的常见键盘命令包括 F10F11。 有关更深入的说明,请参阅 “首先查看调试器”。

检查数据提示中的变量

  1. 在当前代码行(由黄色执行指针标记)中,将鼠标悬停在 c1 对象上以显示数据提示。

    查看数据提示

    数据提示显示变量的 c1 当前值,并允许检查其属性。 调试时,如果出现意外值,则表示在前一代码行或调用的代码行上出现 bug。

  2. 展开数据提示以查看 c1 对象的当前属性值。

  3. 如果要固定数据提示,以便在执行代码时可以继续查看 c1 的值,请单击小图钉图标。 (可将固定的数据提示移动到方便的位置。)

编辑代码并继续调试

如果在调试会话中间确定要在代码中测试的更改,也可以执行此作。

  1. 单击第二个 c2.front() 实例,并将 c2.front() 更改为 c2.back()

  2. 多次按 F10(或“调试”“单步跳过”),向前移动调试器并执行已编辑的代码。>

    编辑并继续

    F10 一次使调试器前进一个语句,但是是跳过函数而不是单步执行它们(跳过的代码仍然执行)。

有关使用编辑并继续以及功能限制的详细信息,请参阅 “编辑并继续”。

后续步骤

本教程介绍了如何启动调试器、逐步执行代码和检查变量。 你可能想要大致了解调试器功能,以及指向详细信息的链接。