Visual Studio 调试器提供了许多强大的功能来帮助你调试应用。 本主题提供了一种快速了解一些基本功能的方法。
创建新项目
打开 Visual Studio 并创建项目。
如果“开始”窗口尚未打开,请选择“ 文件 > 启动窗口”。 在“开始”窗口中,选择 创建新项目。 在搜索框中,键入“空项目”,然后选择C++ 空项目 模板。
如果未看到项目模板,请打开 Visual Studio 安装程序。 选择 具有C++工作负载的桌面开发,然后选择 “修改”。
Visual Studio 创建项目。
创建名为 的新源文件
MyDbgApp.cpp
在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 应在哪里暂停正在运行的代码,以便你可以检查变量的值、内存的行为,或者确定代码的某个分支是否被执行。 这是调试中最基本的功能。
若要设置断点,请单击函数调用左侧的
doWork
边栏(或选择代码行并按 F9)。现在按 F5 (或选择 “调试 > 开始调试”)。
调试器会在设置断点的位置暂停。 调试器和应用执行暂停的语句由黄色箭头指示。 函数
doWork
调用的行尚未执行。小提示
如果循环或递归中存在断点,或者如果有许多频繁单步执行的断点,请使用条件断点以确保代码仅在满足特定条件时挂起。 条件断点可以节省时间,还可以更容易地调试难以重现的问题。
尝试调试C++中与内存相关的故障时,还可以使用断点检查地址值(查找 NULL)和引用计数。
导航代码
有不同的命令指示调试器继续。 我们展示了一个有用的代码导航命令,从 Visual Studio 2017 开始提供。
在断点处暂停时,将鼠标悬停在语句c1.push_back(20)
上,直到绿色的运行到单击按钮出现,然后按下运行到单击按钮。
应用将继续执行,调用 doWork
,并于你在其中单击按钮的代码行上暂停。
用于单步执行代码的常见键盘命令包括 F10 和 F11。 有关更深入的说明,请参阅 “首先查看调试器”。
检查数据提示中的变量
在当前代码行(由黄色执行指针标记)中,将鼠标悬停在
c1
对象上以显示数据提示。数据提示显示变量的
c1
当前值,并允许检查其属性。 调试时,如果出现意外值,则表示在前一代码行或调用的代码行上出现 bug。展开数据提示以查看
c1
对象的当前属性值。如果要固定数据提示,以便在执行代码时可以继续查看
c1
的值,请单击小图钉图标。 (可将固定的数据提示移动到方便的位置。)
编辑代码并继续调试
如果在调试会话中间确定要在代码中测试的更改,也可以执行此作。
单击第二个
c2.front()
实例,并将c2.front()
更改为c2.back()
。多次按 F10(或“调试”“单步跳过”),向前移动调试器并执行已编辑的代码。>
F10 一次使调试器前进一个语句,但是是跳过函数而不是单步执行它们(跳过的代码仍然执行)。
有关使用编辑并继续以及功能限制的详细信息,请参阅 “编辑并继续”。
后续步骤
本教程介绍了如何启动调试器、逐步执行代码和检查变量。 你可能想要大致了解调试器功能,以及指向详细信息的链接。