好废话到此结束下面贴代码来介绍说明:
="preprocessor">#<stdio.h>
="cpp" style="DISPLAY: none" rows="15" cols="50" name="code">view plaincopy to clipboardpr? # <stdio.h> # <windows.h> AutoExpand { public: AutoExpand( val, char* pval) { a = val; p = pval; } private: a; char *p; }; CantExpand { public: CantExpand( val, char* pval) { a = val; p = pval; } private: a; char *p; }; (void) { p[4] = {0x31,0x32,0x33,0x34}; *a = p; FILE* fp = fopen("File Not Exist", "r"); DWORD dwError = GetLastError; AutoExpand ae(10, "abc"); CantExpand ce(10, "abc"); 0; }
上面代码中出现变量先介绍说明下:
p: 是整形含 4个元素总共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,cp后面加个",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显示是对应十 6进制ASCII码值除了",c" ",d" ",x"外还有些其他参数可以加见后面附表
然后我们看看变量a. a是个指针看左边窗口即使点了它+号展开也只看到了它指向地址第个元素(49).如果想要看得更多数据也可以像我样在上面Memory窗口里看但是 Memory窗口只有个要看多个指针指向数据就麻烦了切来切去那就在watch窗口中显示吧a,4就可以了看到我watch窗口显示没?所以有了第 2个小窍门技巧:
2.watch窗口中把指针当成看只要在指针名后面加上个长度就可以想看样看到对应数据了比如我上面a,4那么如果个指针指向数据很大比如个整形指针a是指向个1000个整数大块内存我只想看看最后4个数据要怎样呢?那就 (a+996),4 呗从第996个数据开始看4个~
接下来这个小窍门技巧是我最喜欢个了调试中遇到系统失败情况通常都要加上 GetLastError获得返回值然后查对应解释才知道原因比如我上面代码要打开个不存在文件结果fopen失败取回了码dwError=2查才知道是文件不存在那么可不可以不用查调试器直接告诉我原因呢?当然可以不然我写这干嘛!刚才码2是记录在dwError中了所以只要在watch窗口看看dwError,hr 看value栏:系统找不到指定文件!爽吧!整理总结下第 3个小窍门技巧:
3. 在watch窗口中察看原因只需要在的后面颊上",hr"就可以了比如我上面 dwError,hr 和 2, hr 都能够显示消息想看某个码解释只要后面加上",hr"就轻松搞定非常方便!这里还要提下是即使不 GetLastError也是可以看原因在fopen完后直接在watch窗口敲 err,hr 也可以显示最近次原因但是我机器重新装了os还没装vc现在用还是安装前尸体所以这个err,hr显示有问题不过还是有应对的法那就是强大TIB信息watch窗口看看*(unsigned long*)(TIB+0x34), hr也是样至于为什么吗那就是GetLastError机制了
还剩2个变量ae和ce这两变量类型名区别但是其他全都样为什么这两个变量在 watch窗口中显示不样呢?ae直接显示出了类成员值ce就显示了个......嗯这就是最后个小窍门技巧:
4. 在vc安装目录msdev\bin目录下有个autoexp.dat文件可以在里面自定义数据显示具体看看它前面大段介绍说明说得很详细我就是在文件后面加上行AutoExpand =_val=<a,d> sz_val=<p,s>
太长了休息!
最新评论