eg: int *p = new int[100];

如果只查看p的话,只能看到一个结果。

可以使用:p,n 查看n个结果。

【watch使用技巧】:

一.格式化数据和表达式赋值语句.

常用变量格式化符(表达式的值后跟逗号,接格式化符,如”(int)0xFFFF,d”):
d,I:有符号的十进制数.
u  :无符号的十进制数.
o  :无符号的八
x,X:十六进制数.
l,h:d,i,u,o,x,X的长前缀或短前缀.
f  :有符号浮点数.
e  :有符号的科学计数法.
g  :有符号的浮点或有符号的科学计数法,用其中较短的一个.
c  :单字符.
s  :字符串.
su :双字节字符串.
st :双字节字符串或ANSI字符串,取决于AUTOEXP.DAT中的Unicode String设置.
hr :Windows类标记.
wm :Windows消息码.

常用内存转储对象的格式化符(用法同变量格式化符):
ma :64个ASCII码字符.
m  :以16进制书写的16字节,后跟16个ASCII字符.
mb :以16进制书写的16字节,后跟16个ASCII字符.
mw :8个字长.
md :4个双精度字.
mq :4个四倍字长的字.
mu :2字节字符(Unicode标准).
#  :将指针扩展到指定的数值数目的内存存储单元上.(#代表一个数字)

WATCH窗口允许重新设置数据变量的格式,
如:可用BY,DW表达式来定位指针的偏移量;
可用&和*运算符,且两运算符都可直接操作内存地址;
甚至可用上下说明符明确指定变量的上下文.
总之,所有格式化方法和指定方法在WATCH窗口都有效

WATCH窗口是一个完整的表达式求值程序,可以在其中查看任何条件语句.

表达式中可用的伪寄存器(可当普通变量进行查看):
@ERR:最后一个错误值,GetLastError API返回相同的值.
@TIB:当前线程的线程信息块.(调试器不能处理”FS:0″格式).
@CLK:时钟寄存器.
@EAX,@EBX,@ECX,@EDX,@ESI,@EDI,@DIP,@ESP,@EBP,@EFL
    :Intel CPU寄存器.
@CS,@DS,@ES,@SS,@FS,@GS
    :Intel CPU段寄存器.
@ST0,@ST1,@ST2,@ST3,@ST4,@ST5,@ST6,@ST7
    :Intel CPU浮点寄存器.

二.适时编码

许多时候只想对两断点间的执行时间有个大致印象,可用@CLK得出两断点间所需执行时间(包括调试器占用的时间).
需要输入两个@CLK观察符,第一个是@CLK,第二个是@CLK=0.第二个的目的是重新运行时将定时器清0.
时间以微秒为单位,大多数情况下需要格式化为毫秒:”@CLK/1000,d”.

三.在WATCH窗口中调用函数

大多数情况下用于执行专门编写的校验数据结构,保证数据的相关性的函数.在释放构件中,从未调用过的函数不会被链接,因此不必担心这类函数会对影响发布构件.
如函数没有参数,也要求使用括号”()”,调用时像用普通函数一样传送参数.WATCH右边将显示函数返回值.
这里有些限制:
1.只能在一个单线程上下文中执行函数.如是多线程程序,将函数输入到WATCH窗口中检查结果后应立即从WATCH窗口清除,否则,如调试函数在第二个线程上下文中执行,会立即终止第二个线程的运行.
2.调试函数必须在20秒内执行.如执行过程中出现异常,程序会在调试器中中止.
3.(常识)只对数据验证进行内存读取,如有问题,调用OutputDebugString类的函数.如更改内存或调用API函数—-尽管这是可能的,但无法预知可能会发生什么.
只要在WATCH窗口中重新计算表达式,已输入WATCH窗口的调试函数就会执行:
.程序处于运行状态并触发某一断点时.
.单步调试某一代码行或某一指令时.
.在WATCH窗口左边编辑完成调试函数的文本并按下回车时.
.在运行程序时出现异常情况,并让你返回调试器中时.
使用调试函数的建议:输入调试函数并查看值后,立即从WATCH窗口清除;只为最关键的数据结构编写调试函数;不要更改个别结构的转储内像.

四.自动扩展自己的类型

常见的自动扩展是RECT,输入RECT型的变量后直接显示其中的某些数据成员的值.
自定义类型扩展时,只需将自己的类型入口加入<VS Common>\MSDev98\Bin目录的AUTOEXP.DAT文件中.
例:
扩展CreateProcess()所用到的PROCESS_INFORMATION结构
1.检查调试器将该类型识别为什么.将PROCESS_INFORMATION变量输入WATCH窗口,右击变量,选择Properties,在这里它被标注为_PROCESS_INFORMATION类型.
2.打开AUTOEXP.DAT文本文件,加入扩展入口.语法如下:
Type=[text]<member[format]>
本例中要查看hProcess和hThread值,故输入:
_PROCESS_INFORMATION=hProcess=<hProcess,X> hThread=<hThread,X>
其中X表示以16进制查看.有个特殊的格式化符<,t>,用于通知调试器输入最易派生类型的类型名.如B派生至A,只有B有自动扩展规则,则B的自动扩展将会是后面跟随着类A的自动扩展规则的类型名B.

五.Set Next Statement命令

可以在调试时从菜单运行,但也可在WATCH窗口中直接设置EIP寄存器—-小心,可能很容易摧毁程序.在最优化的释放构件中,最安全的方法是在Disassembly窗口中使用该命令.如代码在堆栈上创建了临时变量,更要多加小心.
最常用的情况是:在出问题的函数前设置一个断点,检查进入的参数,单步调试整个函数;如问题不是重复的,使用Set Next Statement设置返回到断点的执行点,并更改参数.这样可在一个调试会话中测试多个假设,节省测试时间,但它不能用于所有场合,因为函数执行会破坏其状态.
另一个常用地点是测试时填充数据结构,如表和数组,可用它输入额外的数据并查看代码如何处理–当某些数据条件难于复制时更为方便.

VS watch(监视)的技巧相关推荐

  1. 顺序搜索小技巧-监视哨的作用

    来自<数据结构> 严蔚敏 吴伟民 著, 1986 版. 教材上在查询时,用了一个小技巧,就是监视哨.并说,实践验证当n>1000时,效率提高几乎一倍以上.见原书P221. 笔者为此做 ...

  2. c语言debug小窗口怎么移动,大家指点下VS中调试的监视、内存窗口的技巧

    最近在开发的时候调试问题,发现本人的调试技术简直是渣的要死,羞愧难当.监视窗口的变量不是很明显的告诉你,压根就看不懂 ,监视窗口的变量表达式又不会用~  至于内存窗口...本人也是醉了... 无颜以对 ...

  3. 监视Rails进程内存泄漏的技巧

    Rails应用比较容易遇到的两类性能问题:一类是Rails执行很慢,CPU消耗过高:另一类是Rails进程内存泄漏.解决这两类问题都需要你首先能够精确定位出现问题的代码,然后才知道如何对症下药. 一. ...

  4. Java技巧:创建监视友好的ExecutorService

    在本文中,我们将扩展具有监视功能的ExecutorService实现. 这种监视功能将帮助我们在实时生产环境中测量多个池参数,即活动线程,工作队列大小等. 它还将使我们能够衡量任务执行时间,成功任务计 ...

  5. java监听剪贴板_Eclipse RCP应用中监视剪贴板变化的小技巧

    最近在做的一个基于Eclipse RCP的下载工具,需要监视系统剪贴板中. 自己在实现的时候主要遇到了两个问题: 1.如果监视线程使用非UI线程,则不能去访问剪贴板 2.如果监视线程使用UI线程,则该 ...

  6. 掌握监视网页内容采集的8大技巧

    随着互联网时代的到来,网络数据的重要性日益凸显.而在这些海量数据中,网页内容是其中最重要的一部分.对于企业来说,监视网页内容并进行采集分析已成为了一项必不可少的工作.本文将从八个方面深入探讨监视网页内 ...

  7. 深度学习11个实用技巧

    深度学习11个实用技巧 深度学习工程师George Seif发表了一篇博文,总结了7个深度学习的技巧,本文增加了几个技巧,总结了11个深度学习的技巧,主要从提高深度学习模型的准确性和速度两个角度来分析 ...

  8. 32如何向Linux转,linux使用技巧32则

    linux使用技巧32则 [日期:2006-11-28] 来源: 作者: [字体:大 中 小] 1:HOST的乐趣: Host能够用来查询域名,然而它可以得到更多的信息.host -t mx linu ...

  9. 提高PHP运行速度的小技巧

    使用PHP的最大1个优势就是速度快.一般情况下,PHP总是具有足够的速度支持Web内容动态生成,许多时候甚至无法找出比它更快的方法.然而,当面对庞大的访问量.高负荷的应用.有限的带宽,以及其他各种带来 ...

最新文章

  1. [转]C++学习:VC++动态链接库(DLL)编程深入浅出(zz)
  2. pyqt5讲解3:QComboBox,QSpinBox,QSlider
  3. python开发实习面试
  4. C# 将内存中的datatable数据导出为Excel(方法二,创建Excel对象导出)
  5. 海康威视相机 RTSP 传输延迟解决方案
  6. unsupported pickle protocol: 5
  7. 三维动画渲染用什么软件好?
  8. DP算法:动态规划算法
  9. 学习MyBatis3这一篇就够了
  10. python编程midi键盘按键_用树莓派自制 MIDI 键盘
  11. Java中过大整数储存问题(bushi
  12. 大型电商架构亿级流量电商详情页系统实战-缓存架构+高可用服务架构+微服务架构(七)
  13. Linux 文件服务系统
  14. oracle 定义atp规则,ATP新积分规则详解
  15. Linux命令行与shell脚本编程之笔记(4)
  16. 编辑引导扇区修复分区引导解决磁盘分区打不开
  17. 用3DS MAX和PHOTOSHOP制作机器人----作者: Egbert Tjong 来源: 火星时代
  18. 和Keyle一起学StrangeIoc – Acknowledgements
  19. 第1章 JVM语言家族概览 《Kotin 编程思想·实战》
  20. android 通知中心,你的 Android 通知中心从未如此井然有序过:个性通知

热门文章

  1. 串行协议--RS-485协议
  2. 因地制宜,携手共赢 | 亚太地区游戏发行商洞察
  3. Win11 22H2 22621.521大版本更新!
  4. 制作横版游戏KillBear第9课:暂停层+屏蔽下层监听
  5. 企业微信一聊天连不上服务器,企业微信_访问频率限制
  6. 一个00后的中专生是怎么在深圳拿到15K(Java后端开发)
  7. 佳能推出三款家用照片喷墨打印机及两款照片纸
  8. 反恐精英ol永恒python不能拍卖_《反恐精英Online》五一假期 欢乐拍卖会惊喜来袭...
  9. 实习之大量学生信息数据生成
  10. JavaSE学习笔记(持续更新)