- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
HYPERLINK /tony23/2089244/Message.aspx \l # VC++6.0调试篇:变量的观察--watch窗口的技巧
写一下VC6的watch窗口的一些小技巧,对于调试过程是非常有帮助的。VC6年纪已经很大了,微软好像也不再支持,但是还是有很多人在用。我本人是非常喜欢它的小巧(相对vs2003,2005),占资源少,即使这样它的调试功能仍然超级强,真是不错。?
?????? 好,废话到此结束,下面贴代码来说明:
#include?stdio.h#include?windows.hclass?AutoExpand{public:????AutoExpand(int?val,?char*?pval)????{????????a?=?val;????????p?=?pval;????}private:????int?a;????char?*p;};
class?CantExpand{public:????CantExpand(int?val,?char*?pval)????{????????a?=?val;????????p?=?pval;????}private:????int?a;????char?*p;};
int?main(void){????int?p[4]?=?{0x31,0x32,0x33,0x34};????int?*a??=?p;????????FILE*?fp?=?fopen(File?Not?Exist,?r);????DWORD?dwError?=?GetLastError();????????AutoExpand ae(10, abc);?? ?CantExpand ce(10, abc);????return?0;}
??????? 上面代码中出现的变量先说明一下:
?????? p: 是整形数组,含四个元素,总共16Byte。
?????? a: 整形指针,指向数组p
????? fp: 文件指针,用来标识打开的File Not Exist,我机器里是没这个文件的。
??? dwError: 获得fopen失败的错误码。一般来说可以用FormatMessge来格式化这个错误原因或者直接用VC自带的工具errorlookup来查找这个错误码的解释。
????? ae和ce: 是自定义的AutoExpand类型的变量和CantExpand类型的变量。注意,这两种类型只有类型名字不同。
??? 下面看一下我在调试这个程序的时候,watch窗口的显示:
上图中,左边是Context窗口的Locals页,显示所有局部变量。右边是Watch窗口,是我自己添加的要观察的对象。
好,先看看整形数组p。我们看到Context窗口的显示p其实只显示了数组的地址,点了+号展开后,显示出了4个整形数据。而右边窗口,我添加了一个p,c。p后面加个,c是什么意思呢?看看效果,p,c下面的[0],[1],[2],[3]显示的是这4个整形值对应的ascii字符哈。所以从这里有了第一个小技巧:
1.watch窗口中,在整形变量后面加上,c可以显示该变量对应的ASCII字符。实际上,可以直接敲数字这么显示也行。比如上面右边窗口中的118,c的对应值是v。也就是说118对应的ASCII字符是v。那么,反过来,要知道一个字符的ASCII码值怎么看呢?看上面,v,d就是显示字符v对应的十进制ASCII码值是118。 v,x显示的是对应的十六进制的ASCII码值。除了,c?? ,d?? ,x外,还有一些其他的参数可以加,见后面的附表。
然后我们看看变量a. a是个指针。看左边窗口,即使点了它的+号展开,也只看到了它指向的地址的第一个元素(49).如果想要看得更多的数据,也可以像我一样,在上面的Memory窗口里看。但是Memory窗口只有一个,要看多个指针指向的数据就麻烦了,切来切去。那就在watch窗口中显示吧,a,4就可以了,看到我的watch窗口的显示没?所以,有了第二个小技巧:
2.watch窗口中,把指针当成数组看,只要在指针名后面加上一个长度,就可以想看数组一样看到对应的数据了。比如我上面的a,4。那么如果一个指针指向的数据很大,比如一个整形指针a是指向一个1000个整数的大块内存,我只想看看最后4个数据,要怎样呢?那就 (a+996),4 呗。从第996个数据开始,看4个~
接下来这个小技巧是我最喜欢的一个了。调试中遇到系统函数调用失败的情况,通常都要加上GetLastError()函数获得返回值,然后查对应的解释才知道错误原因。比如,我上面的代码要打开一个不存在的文件,结果fopen失败。取回了错误码dwError=2,一查才
文档评论(0)