VC调试器高级应用----WATCH窗口篇

转载 2004年07月21日 14:13:00
VC调试器高级应用----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设置返回到断点的执行点,并更改参数.这样可在一个调试会话中测试多个假设,节省测试时间,但它不能用于所有场合,因为函数执行会破坏其状态. 另一个常用地点是测试时填充数据结构,如表和数组,可用它输入额外的数据并查看代码如何处理--当某些数据条件难于复制时更为方便. 

Eclipse的watch窗口怎么调

Eclipse的watch窗口
  • qq_20916555
  • qq_20916555
  • 2017年04月18日 15:43
  • 2813

VC++ Watch窗口查看指针指向的数组

原文:http://blog.csdn.net/minidick/article/details/3763613假设int *block;在watch窗口查看block,看到的是block的地址用bl...
  • wag2765
  • wag2765
  • 2016年01月25日 16:41
  • 1089

20150812-如何在IAR中通过Watch窗口观察局部变量的值

原文地址:http://www.cnblogs.com/wx865220862/archive/2013/03/27/2984168.html 最近在用430开发一款产品,在软件调试的时候发现Wat...
  • sy_lixiang
  • sy_lixiang
  • 2015年08月12日 16:26
  • 3499

VC调试器高级应用----高级断点篇

VC调试器高级应用----高级断点篇CND8学院VC教程 发布日期:2008年12月15日VC调试器高级应用----高级断点篇一.高级断点语法  高级断点语法由两部分组成:1.上下文部分.2.位置,表...
  • newboy686
  • newboy686
  • 2011年01月30日 20:58
  • 415

VC调试器高级应用

VC调试器高级应用----高级断点篇 一.高级断点语法 高级断点语法由两部分组成:1.上下文部分.2.位置,表达式,变量或Windows消息条件. 用函数,源文件和二进制模块来指定上下文,上下文的表示...
  • junjie020
  • junjie020
  • 2011年03月15日 09:04
  • 852

VC调试器高级应用----系统函数,DLL段点

一.高级断点语法   高级断点语法由两部分组成:1.上下文部分.2.位置,表达式,变量或Windows消息条件.   用函数,源文件和二进制模块来指定上下文,上下文的表示方法:   {[函数],[源...
  • xiyanlgu
  • xiyanlgu
  • 2013年06月20日 10:23
  • 828

【转】VC++6.0调试篇:运行时间的观察--watch窗口的技巧续

微软精心打造的VC调试器确实非常方便,再来看个watch窗口的小技巧:用作计时器  有时候可能想要知道个函数或者一段代码运行需要的粗略时间。一般是假如一些计时的处理,比如函数开始时调用GetTickC...
  • Ralfkaka
  • Ralfkaka
  • 2013年08月26日 11:31
  • 531

VC++6.0调试篇:运行时间的观察--watch窗口的技巧续

VC++6.0调试篇:运行时间的观察--watch窗口的技巧续    微软精心打造的VC调试器确实非常方便,再来看个watch窗口的小技巧:用作计时器  有时候可能想要知道个函数或者一段代码运行需要的...
  • Augusdi
  • Augusdi
  • 2011年05月06日 16:08
  • 1783

VC6.0调试篇:watch窗口的技巧

本文转载于:http://blog.csdn.net/gisfarmer/article/details/4062139
  • XGsilence
  • XGsilence
  • 2014年07月03日 17:18
  • 1434

【转】VC++6.0调试篇:变量的观察--watch窗口的技巧

写一下VC6的watch窗口的一些小技巧,对于调试过程是非常有帮助的。VC6年纪已经很大了,微软好像也不再支持,但是还是有很多人在用。我本人是非常喜欢它的小巧(相对vs2003,2005),占资源少,...
  • Ralfkaka
  • Ralfkaka
  • 2013年08月26日 11:31
  • 1497
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VC调试器高级应用----WATCH窗口篇
举报原因:
原因补充:

(最多只允许输入30个字)