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 就会建议您想到的内容。
智能感知的另一个非常有用的功能是在运行时之前检测错误。其中一些错误非常琐碎
在上面的例子中,if
被错误地拼写为 iff
但是,在某些情况下,智能感知会报告神秘的错误。考虑以下代码行
3 = a;
显然是不合逻辑的。但是,智能感知将错误报告为“表达式必须是可修改的左值
”。虽然其中一些错误很难诊断,但智能感知会尽可能地报告行号,因此您可以使用它来查明问题。但是智能感知并非都是金玉良言。例如,考虑以下代码行
cout << 0/0;
显然,这行代码是不可能的。但是智能感知没有捕获到它!您需要在错误出现之前构建它:“C2124:除以零或模除零”
调试最基本的部分之一是设置断点。简单来说,它们允许您在程序执行的任何点查看程序变量的值,当代码片段有问题但您不确定问题在哪里时,这非常有用。设置断点很容易:转到您想让程序停止执行的代码行,然后按 F9。或者,单击代码窗口内左侧的栏。将出现一个圆圈,表示已在该行设置了断点。
现在调试程序。当到达指定的代码行时,程序会停止。以下是本示例程序在此步骤中的 Visual Studio 外观
可以使用“局部变量”和“自动变量”窗口查看变量的值,或者简单地将鼠标悬停在该变量上(这两个操作都在此屏幕截图中演示)。
“局部变量”和“自动变量”窗口都显示变量值,但它们的目标区域不同,因此它们的目标变量也不同。
这也是查看性能数据的时机,我们将在后面的阶段介绍。
需要注意的是,如果您使用工具栏中的“暂停”选项暂停程序执行,您也会进入断点阶段。
在某些情况下,无法查看变量,Visual Studio 会报告它们“已被优化掉且不可用”。这可能是由于多种原因导致的,包括但不限于堆损坏、垃圾回收等等。
较新的 Visual Studio 版本包含用于跟踪和分析程序对各种组件(如 CPU 和内存)的使用情况的功能。
现在,一旦到达断点或程序执行暂停,就可以查看与快照拍摄时间相对应的内存使用情况
这需要您定期拍摄快照,以便您可以比较程序在两个不同时间点的内存消耗和使用情况。还可以查看到目前为止的 CPU 处理信息
请注意,必须明确启用相关选项,因为它们会产生额外的 CPU 开销,并且可能会影响程序,具体取决于其预期任务。
尽管 Visual Studio C++ 主要用于支持 C++,但 Visual Studio 对 C 编程 语言提供了相当强大的支持。但是,问题在于没有隐式选项可以这样做。
为了解决这个问题,创建一个空的项目文件。然后,在“解决方案资源管理器”中,添加一个新的 C++ 文件,但是 将文件扩展名设置为 .c
而不是 .cpp
。
智能感知支持是可用的,但它不是 C++。为了证明这一点,cout
将不再起作用,因为它不是 C 规范的一部分;您需要使用 printf
。