Visual C++ 调试技巧: 从变量查看窗口获取更多信息

在Visual C++调试中,我们经常需要在变量监视窗口中看到更多的信息。比如,我们定义了int类型的指针,该指针指向了好几个int大小的内存区域,我们希望看到的变量信息是整个数组,而不是只有指针指向的那个数字。又如,我们在调试Windows消息时,想知道的是消息的宏定义字符串(姑且让这么说吧),如WM_CLOSE,而不是生硬的数字。还有更多……

这些都很容易做到,只是您可能不知道。先上图吧,注意看监视窗口中变量内容显示的格式。

  • 为查看消息的内容,只需要在变量名后面添加“ , wm”就能显示消息的名字。
  • 查看句柄的返回值和错误代码,只需要在变量名的后面添加“, hr”即可显示返回值的意义和错误信息。

是不是很方便呢?下图的后面给出了MSDN上关于变量格式的链接及其内容摘要,相信您阅读后将受益颇多。


“监视”窗口或“快速监视”对话框中调试本机代码时使用格式说明符更改值的显示格式: ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.chs/dv_vsdebug/html/0f6f3b7c-ce2c-4b4d-b14f-7589dbed5444.htm

为便于大家查看,下面复制了MSDN中的内容。


下表说明调试器可识别的格式说明符。

说明符

格式

表达式

显示的值

d,i

signed 十进制整数

0xF000F065, d

-268373915

u

unsigned 十进制整数

0x0065, u

101

o

unsigned 八进制整数

0xF065, o

0170145

x,X

十六进制整数

61541, x

0x0000F065

l,h

用于 d i u o x X long short 前缀

00406042,hx

0x0c22

f

signed 浮点型

(3./2.), f

1.500000

e

signed 科学计数法

(3./2.), e

1.500000e+000

g

signed 浮点型或 signed 科学计数法,显示其中较短的数

(3./2.), g

1.5

c

单个字符

0x0065, c

101 'e'

s

字符串

0x0012fde8, s

"Hello world"

su

Unicode 字符串

0x0012fde8, su

"Hello world"

s8

UTF-8 字符串

0x0012fde8, s8

"Hello world"

hr

HRESULT Win32 错误代码。(调试器自动将 HRESULT 解码,因此这些情况下不需要该说明符。)

0x00000000L, hr

S_OK

wc

窗口类标志。

0x00000040, wc

WC_DEFAULTCHAR

wm

Windows 消息数字

0x0010, wm

WM_CLOSE

!

原始格式,忽略任何数据类型视图自定义项

i !

4

下表包含用于内存位置的格式化符号。可以使用带有计算为位置的任何值或表达式的内存位置说明符。

符号

格式

表达式

显示的值

ma

64 ASCII 字符

ptr, ma

0x0012ffac .4...0...".0W&.......1W&.0.:W..1...."..1.JO&.1.2.."..1...0y....1

m

以十六进制表示的 16 个字节,后跟 16 ASCII 字符

ptr, m

0x0012ffac B3 34 CB 00 84 30 94 80 FF 22 8A 30 57 26 00 00 .4...0...".0W&..

mb

以十六进制表示的 16 个字节,后跟 16 ASCII 字符

ptr, mb

0x0012ffac B3 34 CB 00 84 30 94 80 FF 22 8A 30 57 26 00 00 .4...0...".0W&..

mw

8 个字

ptr, mw

0x0012ffac 34B3 00CB 3084 8094 22FF 308A 2657 0000

md

4 个双倍长字

ptr, md

0x0012ffac 00CB34B3 80943084 308A22FF 00002657

mq

2 个四倍长字

ptr, mq

0x0012ffac 7ffdf00000000000 5f441a790012fdd4

mu

2 字节字符 (Unicode)

ptr, mu

0x0012fc60 8478 77f4 ffff ffff 0000 0000 0000 0000

查找替换中的正则表达式也是很有用的,但这里的正则表达式和我们编程用到的正则表达式有所不同 ,参见 ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.chs/dv_vsnav/html/718a617d-0e05-47e1-a218-9746971527f4.htm

展开阅读全文

没有更多推荐了,返回首页