在调试程序的过程中,如果程序在某个位置挂起执行(例如:中断到某个断点),通常我们希望能够通过一些工具观察程序的
当前状态。其中,最重要的当属查看程序中数据的值。例如,查看某个变量的类型和值、某个寄存器的值、或某段内存的值。
所以,几乎所有的调试器提供了大量用于检查和修改程序数据的工具。 表 1列出了Visual Studio所提供的用于检查和修改程序
数据的工具。
工具名称工具名称 描述描述
“局部变量”窗口
用于显示对于当前上下文或范围来说位于本地的变量。 通常,这是当前正在执行的过程或函
数。 调试器自动填充此窗口。
“自动” 窗口
用于显示在当前代码行和上一代码行中使用的变量。 对于C++程序,“自动”窗口还会显示函数
返回值。 与“局部变量”窗口类似,“自动”窗口是由调试器自动填充的。
“监视”窗口
在“监视”窗口中可以添加要监视其值的变量。 此外,还可以添加调试器所能识别的任何有效表
达式。
“快速监视”对话框
“快速监视”对话框在概念上类似于“监视”窗口,但是“快速监视”每次只能显示一个变量或表达
式。 如果需要快速查看变量或表达式而不想打开“监视”窗口,则可以使用“快速监视”。
“寄存器”窗口
“寄存器”窗口用于显示寄存器内容,只有在程序正在运行或处于中断模式时“寄存器”窗口才会显
示。 为了减少混乱,“寄存器”窗口将寄存器组织成组,具体情况随平台和处理器类型的不同而
不同。右击“寄存器”窗口,可以看到一个包含组列表的快捷菜单,可根据需要显示或隐藏它。
“内存”窗口
使用“内存”窗口可以看到应用程序所占用的内存空间的情况。 在“监视”窗口、“快速监视”、“自
动”窗口和“局部变量”窗口中都可看到内存中特定位置初变量的内容,但在“内存”窗口中可看到尺
寸较大的图像。 这对于检查大片的数据(如缓冲区和大的字符串)很方便,在其他窗口中显示
就不太好。 但是,“内存”窗口不仅限于显示数据, 按照定义“内存”窗口可以显示内存空间中的
任何内容,无论它是数据、代码或是未分配内存中的无用随机位。
数据提示
数据提示是用于在调试过程中查看程序中的变量和对象的有关信息的最方便工具之一。 在调试
器处于中断模式时,可以在当前范围内查看变量的值,方法是将鼠标指针置于源窗口中的变量
上。
可视化工具
通过可视化工具可以以有意义的方式查看对象或变量的内容。 例如,可以使用 HTML 可视化工
具来查看 HTML 字符串,因为这样可以解释该字符串并在浏览器中显示出来。 您可以通过数据
提示、“监视”窗口、“自动”窗口、“局部变量”窗口或“快速监视”对话框来访问可视化工具。
表表 1 Visual Studio提供的数据检查和修改工具列表提供的数据检查和修改工具列表
下面,让我们通过一些示例来看看如何使用这些工具来检查和修改数据。
观察变量值的变化
给定清单1所示的程序,我们希望查看变量sum值的变化,从而验证程序的逻辑是否正确。
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
int sum = 0;
for (int i = 1; i <= 10; ++i)
sum += i;
cout << "1 + 2 + 3 +... + 10 = " << sum << endl;
return 0;
}
清单清单1 观察变量值的变化代码示例观察变量值的变化代码示例
最直接的方法就是在“sum += i”所在行设置一个断点,让程序反复中断到该断点。这时,我们可以通过“局部变量”窗口、“自动”
窗口、“监视”窗口、“快速监视”对话框、或数据提示来观察变量sum值的变化。对于“局部变量”窗口、“自动” 窗口、“监视”窗口
来说,每一次变量的值发生改变,Visual Studio会使用红色的字体标记这种变化。图 1~图 5显示了在i等于5的时,通过“局部
变量”窗口、“自动” 窗口、“监视”窗口、“快速监视”对话框、和数据提示显示sum的值。