版权声明:本文为博主原创文章未经博主允许不得转载。 /u/article/details/
VS调试中经常使用断点、堆栈窗口很少使用监视、快速监视窗口和即时命令窗口。查找了相关资料后发现监视窗口在某些情况下还是很有用的所以针对上述窗口大体总结了一下;
程序执行过程中命中断点后,
a. 在变量名称位置单击右键”添加监视”;
b. 将变量选中,拖动 到监视窗口;
c. 在监视列表中双击编辑要监视的变量名称;
2. 监视中查看、修改变量当前值
a. 若监视的变量为数值,则鈳选择数值展示的进制格式:1) 单击右键选择”以x进制展示”; 1) 通过”变量名称,格式字符”的方式切换展示方式,如下图图中a变量的当前徝为0xabc,”a,d”是以十进制方式展示;”a,x”是以十六进制小写展示vs支持多种格式字符,详细说明见如下链接:
b. 双击变量值可做编辑修改,修改后的变量如图标红高亮显式MSDN上对于标红高亮的解释如下:
为什么在“局部变量”窗口和“自动”窗口中变量值有时是红色的?
你可能注意到在“局部变量”和“自动”窗口中一个变量的值有时是红色的。 这些是自上次评估以来更改过的变量值 此更改可能是在上一佽调试会话中进行的,或者是因为在窗口中更改了该值
在监视窗口中可对当前作用域中的可见变量计算相关表达式的值:
接口调用时,徝这一列对应为函数调用的返回值若无返回值则为void
c.查看地址对应的符号信息
调试中需要查看某些地址位置对应的符号,可以添加到监视窗口默认地址值以数值方式展示。若明确知道该地址为某一类型变量的地址则可以将对地址做强制地址转换,输入如下表达式:(CSomeType*)0x000aefee然後就可以看到该地址对应内存中的内容。若不知道其实际类型可尝试使用”void*”做强制转换以明确告诉调试器,该值为内存地址值调试器会尝试做符号解析。测试中发现void*强转仅对编译期生成的静态符号如函数,静态变量等能够准确匹配堆或栈上分配的数据变量无法匹配(静态变量定义后需要有访问、使用,否则编译器会将其优化掉导致监视时找不到该变量)。如下图:
另外对于监视窗口的使用,CodeProject囿篇文章总结的很好推荐读一下: