现在的位置: 首页 > 综合 > 正文

Visual Studio 调试小技巧(2)- 从查看窗口得到更多信息

2014年11月15日 ⁄ 综合 ⁄ 共 1146字 ⁄ 字号 评论关闭

原文: http://blog.csdn.net/cadcisdhht/archive/2010/06/06/5651488.aspx 

 

在使用Visual Studio开发调试程序时,我们经常需要打开查看窗口(Watch)来分析变量。有时在查看窗口显示的内容不是很直观。为了能从查看窗口的变量中得到更多的信息,我们需要一些小的技巧。下面是几个例子。

1. Windows消息

在开发调试界面程序时,我们经常需要查看消息的内容。当在查看窗口中,仅仅只显示出消息对应的整数值,我们并不能直观地知道究竟是什么消息。比如:

查看窗口以整数值显示消息

为了能让查看窗口显示出消息内容,我们只需要在变量名添加“, wm”的格式化后缀,就能显示消息的名字:

查看窗口以整数值显示消息名字

2. 句柄返回值

Windows有很多API返回一个HANDLE类型的值来表示操作是否成功。当操作失败时,返回一个特定的值来表示操作失败的原因。通常我们不可能记住所有的错误代码对应的失败类型。比如在下面的例子中,我们就不一定能看出0x80070005表示的错误原因:

查看窗口以整数值显示错误代码

为了能方便我们从句柄的错误代码中直观地发现出错原因,Visual Studio在查看窗口中提供了一个“, hr”后缀。在变量名后添加该后缀,查看窗口就能显示出具有可读性的信息。比如,我们在上述返回值后添加“, hr”之后,就能得到:

查看窗口以可读性文字显示错误代码

从这个句柄值的名字看来,很有可能是访问权限出问题了。

3. 错误代码

Windows 中有很多API在操作失败时,会设置一个错误代码,程序员可以调用函数GetLastError得到该错误代码。在调试时,如果代码中没有调用GetLastError,那么我们就不能很方便地得到给错误代码。

由于这个错误代码是设置在一个叫$ERR的寄存器里。我们可以在查看窗口中显示出该寄存器的值从而得到错误代码。例如,我们运行如下代码:


如果我们之前没有新建temp2.txt这个文件,那么我们就能得到如下的错误代码:

查看窗口以整数值形式显示$ERR中的错误代码

我们可能不能从错误代码0x0002看出出错的原因。有了前面句柄的经验,我们可以在后面添加“, hr”后缀,此时查看窗口显示为:

查看窗口以可读性文字显示$ERR中的错误代码

现在我们就知道出错的原因是系统不能找到文件。

4. 数组

数组是我们使用最为频繁的一种数据结构。但当数组是以一个指针和其长度来表示时,查看窗口并不能直观地显示出数组中每个元素的值,而只能显示出该数组的起始地址以及它的第一个元素。下面就是一个例子:

查看窗口只显示出数组的一个元素

为了显示出数组中所有元素的内容,我们可以在数组名的后面添加一个“, #”(#表示数组的长度)。如果我们在上面的数组名添加该后缀名就得到:

查看窗口显示出数组的所有元素

 

抱歉!评论已关闭.