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

本文介绍了在Visual Studio(VS)调试C(++)时如何使用格式标志符(Format Specifiers)来更方便地观察变量,特别是处理指针数组、BYTE值和系统错误代码。例如,使用'a, 20X'可以查看全部BYTE值,'$ERR'直接显示Win32错误代码,而'pBuf, 20'则显示指针及其后续20个地址的内容。" 106396704,1895157,BPR:企业业务流程重组实践与价值,"['企业管理', '流程优化', 'BPR实施', '业务流程重组', '企业战略落地']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在调试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窗口功能强大,还待我们进一步发掘呀。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值