跳转到内容

Visual Studio/智能感知和调试

来自维基教科书,开放的书籍,开放的世界

程序员最艰巨的任务之一是调试程序——反复测试以确保程序没有错误。在这里,我们将简要介绍 Visual Studio 可以为开发者提供哪些帮助。

智能感知

[编辑 | 编辑源代码]

它是一个模糊逻辑系统,用于预测代码输入。例如,假设你的代码如下所示

#include "pch.h"
#include <iostream>
using namespace std;
int main()
{
	int a, b;
	cout << "Enter the two numbers\n";
	cin >> a >> b;
}

现在我们要插入一条 cout 行,给出两个数字的总和。当输入 cout 时,Visual Studio 会立即显示一个框,建议您刚输入内容的可能结果。

按 Tab 键接受给定的输出。
仅此一项就非常强大,因为它可以节省开发人员的时间。您不必手动编写每个命令,只需输入一部分,Visual Studio 就会建议您想到的内容。

在 Visual Studio 2012 之前,C++ 的智能感知需要手动按下 CRTL+J 来调用。

错误检测

[编辑 | 编辑源代码]

智能感知的另一个非常有用的功能是在运行时之前检测错误。其中一些错误非常琐碎

在上面的例子中,if 被错误地拼写为 iff

但是,在某些情况下,智能感知会报告神秘的错误。考虑以下代码行

3 = a;

显然是不合逻辑的。但是,智能感知将错误报告为“表达式必须是可修改的左值”。虽然其中一些错误很难诊断,但智能感知会尽可能地报告行号,因此您可以使用它来查明问题。但是智能感知并非都是金玉良言。例如,考虑以下代码行

cout << 0/0;

显然,这行代码是不可能的。但是智能感知没有捕获到它!您需要在错误出现之前构建它:“C2124:除以零或模除零”

调试最基本的部分之一是设置断点。简单来说,它们允许您在程序执行的任何点查看程序变量的值,当代码片段有问题但您不确定问题在哪里时,这非常有用。设置断点很容易:转到您想让程序停止执行的代码行,然后按 F9。或者,单击代码窗口内左侧的栏。将出现一个圆圈,表示已在该行设置了断点。

现在调试程序。当到达指定的代码行时,程序会停止。以下是本示例程序在此步骤中的 Visual Studio 外观

可以使用“局部变量”和“自动变量”窗口查看变量的值,或者简单地将鼠标悬停在该变量上(这两个操作都在此屏幕截图中演示)。

“局部变量”和“自动变量”窗口都显示变量值,但它们的目标区域不同,因此它们的目标变量也不同。

这也是查看性能数据的时机,我们将在后面的阶段介绍。

需要注意的是,如果您使用工具栏中的“暂停”选项暂停程序执行,您也会进入断点阶段。

在某些情况下,无法查看变量,Visual Studio 会报告它们“已被优化掉且不可用”。这可能是由于多种原因导致的,包括但不限于堆损坏、垃圾回收等等。

性能测量

[编辑 | 编辑源代码]

较新的 Visual Studio 版本包含用于跟踪和分析程序对各种组件(如 CPU 和内存)的使用情况的功能。

现在,一旦到达断点或程序执行暂停,就可以查看与快照拍摄时间相对应的内存使用情况

这需要您定期拍摄快照,以便您可以比较程序在两个不同时间点的内存消耗和使用情况。还可以查看到目前为止的 CPU 处理信息

请注意,必须明确启用相关选项,因为它们会产生额外的 CPU 开销,并且可能会影响程序,具体取决于其预期任务。

Visual Studio 中的 C

[编辑 | 编辑源代码]

尽管 Visual Studio C++ 主要用于支持 C++,但 Visual Studio 对 C 编程 语言提供了相当强大的支持。但是,问题在于没有隐式选项可以这样做。

为了解决这个问题,创建一个空的项目文件。然后,在“解决方案资源管理器”中,添加一个新的 C++ 文件,但是 将文件扩展名设置为 .c 而不是 .cpp

智能感知支持是可用的,但它不是 C++。为了证明这一点,cout 将不再起作用,因为它不是 C 规范的一部分;您需要使用 printf

华夏公益教科书