您的位置:首页 > 其它

[VS][VC] 在调试过程中watch变量的技巧

2011-09-07 17:15 387 查看
在调试C(++)的时候,常会用到Watch或者Quick Watch来观察当前一些变量的数据,

但是在使用过程中常会遇到一些不方便的情况,最常见的,比如:

指针变量数组只能知道第一个元素的值
byte的值自做主张地给你标上字符
系统消息仅仅是一个数值,不知道具体的意义等等
如何解决这些问题呢?

其实在Watch或Quick Watch里有一种语法,称为格式标志符(Format Specifiers),使用这个,可以非常方便地解决上述问题,并且可以做到更多……

比如:
当我需要知道BYTE类型的a的内容时,它给出的却是自做主张的字符串,并且只能给出第一个地址的BYTE类型值:


  ====>



此时,你可以在Expression框里写上"a, 20X",这样你就可以看到全部BYTE值了



再比如,
如果你想知道当前的GetLastError值,并不需要调用GetLastError函数,也不需要用FormatMessage来显示具体内容,只需要在Watch框里填写:$ERR即可。

如果要知道具体内容,只需在后面加上hr,如:



这其中,逗号后面的,就称为Format Specifier。

常用的还有:
d, i, u, o, x, X, f, e, g等,跟C语言printf里的一样,表示数字的各种形式,并支持4X等写法;

c, s, su(Unicode String)等,用于显示字符及字符串;

hr 用于显示Win32 error code;

wm用于显示windows消息,比如WM_CLOSE等

其中,hr本来用于显示HRESULT的内容的,在VS2010中,不加hr也可以显示HRESULT的可读性内容了。

对于指针,
为了解决只能显示第一个地址的内容的问题,可以在指针的后面加上数目,比如:

pBuf, 20将显示pBuf指针及之增20个地址的所有内容,这个很好地解决了指针型数组变量的内容显示问题。

为了简化,对于指针的显示,还有一些约定的用法,比如:

pBuf, ma表示,显示pBuf起64个ASCII码字符;

pBuf, m表示,显示pBuf起16个byte的16进制形式,后面紧跟着该16个byte的ASCII码字符形式;

pBuf, mw表示,显示8个word;pBuf, md显示4DWORD;pBuf, mq显示2QWORD等等

 

总之,watch及quick watch窗口功能强大,还待我们进一步发掘呀。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  byte windows string 语言 2010 c