资源描述:
《VC6.0调试篇:变量的观察--watch窗口的技巧》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、VC++6.0调试篇:变量的观察--watch窗口的技巧写一下VC6的watch窗口的一些小技巧,对于调试过程是非常有帮助的。VC6年纪已经很大了,微软好像也不再支持,但是还是有很多人在用。我本人是非常喜欢它的小巧(相对vs200352005),占资源少,即使这样它的调试功能仍然超级强,真是不错。好,废话到此结束,下而贴代码来说明:#include#includeclassAutoExpand{public:AutoExpand(intval,char*pval){a=val;p=pval;}private:inta;ch
2、ar*p;};classCantExpand{public:CantExpand(intval,char*pval){a=val;p=pval;}private:inta;char*p;};intmain(void){intp[4]={0x31,0x32,0x33,0x34};int*a=p;FILE*fp=fopen(HFileNotExist”,”广);DWORDdwError=GetLastError();AutoExpandae(10,nabcH);CantExpandce(10,MabcM);return0;}上而代码中出现的变量先说明一下:P:是整形
3、数组,含四个元素,总共16Byteoa:整形指针,指向数组pfp:文件指针,用来标识打开的”FileNotExist”,我机器里是没这个文件的。dwError:获得fopen失败的错误码。一般来说可以用FormatMessge来格式化这个错误原因或考直接用VC自带的工具errorlookup来查找这个错误码的解释。ae和ce:是自定义的AutoExpand类型的变量和CantExpand类型的变量。注意,这两种类型只有类型名字不同。卜•面看一下我在调试这个程序的时候,watch窗口的显示:l(Globals)intp[]int*a^
4、
5、(AIIglobalmem
6、bers/1
7、»main-<0x31,0x32,0x33,0x310;=P:3•<-巻俭i%!®l芒FILE*Fp=FopenC'FileNotExist",DWORDdwError=GetLastError();NameValue田ae田Fp0x00000000dwError2田ceSa0x0O12fF70"9E冃POx0012fF7O[0]49[1]50[2]51[3]52fAutoI.ocalsXthis/琲Context:
8、mainQNameQ[0][1】[2][3]118tcduErrorth
9、rValue0x0Q12FI:70495052'P•2・•3・W0x761187•(unsignedlong«)(TlB*0x34),hr0X00000002系统找不到指定的文件。0X00000002系统找不到指定的文件。err,hr2,hr961880121AutoExpandae(10»"hello");CantExpandce(10f"hello'*);Qreturn0;上图中,左边是Context窗口的Locals页,显示所有局部变量。右边是Watch窗口,是我自己添加的要观察的对象。好,先看看整形数组p。我们看到Context窗口的显示p其实只显示了数
10、组的地址,点了+号展开后,显示出了4个整形数据。而右边窗口,我添加了一个p,c。p后面加个”,c”是什么意思呢?看看效果,p,c下面的[0],[1],[2],[3]显示的是这4个整形值对应的ascii字符哈。所以从这里有了笫一个小技巧:1.watch窗口中,在整形变量后而加上蔦c”可以显示该变量对应的ASCII字符。实际上,可以直接敲数字这么显示也行。比如上面右边窗口中的1183c的对应值是‘V•。也就是说118对应的ASCII字符是‘3。那么,反过来,要知道一个字符的ASCII码值怎么看呢?看上面,V3d就是显示字符V对应的十进制ASCII码值是118oV,x
11、显示的是对应的十六进制的ASCII码值。除了”C'蔦d”蔦x”外,还有一些其他的参数可以加,见后面的附表。然后我们看看变量a.a是个指针。看左边窗口,即使点了它的+号展开,也只看到了它指向的地址的第一个元素(49)•如果想要看得更多的数据,也可以像我一样,在上面的Memory窗口里看。但是Memory窗口只有一个,要看多个指针指向的数据就麻烦了,切来切去。那就在watch窗口中显示吧,a,4就可以了,看到我的watch窗口的显示没?所以,有了第二个小技巧:2.watch窗口中,把指针当成数组看,只要在指针名后面加上一个长度,就可以想看数组一样看到对应的数据了。比
12、如我上面的比4。那么如果