vs2010 调试中监视变量
在msdn中写了如何查看调试的数据,网址:
http://msdn.microsoft.com/zh-cn/library/vstudio/esta7c62(v=vs.100).aspx
Visual Studio 调试器提供了各种用于检查和修改程序状态的工具。 这些工具中的大多数仅在中断模式下有效。
数据提示是用于在调试过程中查看程序中的变量和对象的有关信息的最方便工具之一。 在调试器处于中断模式时,可以在当前范围内查看变量的值,方法是将鼠标指针置于源窗口中的变量上。 有关更多信息,请参见如何:使用数据提示功能。
可视化工具是 Visual Studio 调试器的新组件,通过它可以以有意义的方式查看对象或变量的内容。 例如,可以使用 HTML 可视化工具来查看 HTML 字符串,因为这样可以解释该字符串并在浏览器中显示出来。 您可以通过数据提示、“监视”窗口、“自动”窗口、“局部变量”窗口或“快速监视”对话框来访问可视化工具。 有关更多信息,请参见 可视化工具。
可以通过变量窗口来了解变量、寄存器内容和表达式。
可以将调试器窗口中使用的数字格式设置为十进制或十六进制。 有关更多信息,请参见更改调试器窗口的数值格式。
下面的调试器窗口提供有关程序的重要信息。省略。
如何监视数组:
下面的程序:
int main()
{
int a[]={,,,,};
for(int i=;i<;i++)
cout<<a[i];
}
我们点击右键,选择添加监视,

立刻,下面的监视窗口会有值:

我们把程序换成
int *a=new int[5];
for(int i=0;i<5;i++)
{
a[i]=i+1;
}
cout<<endl;
再监视a会发现:结果只显示1,

(注意看a是可折叠的,第一行显示地址,第二行显示内容,注意看类型,第一个是int *,第二个是Int)
为什么?
因为a只是一个指向int【5】首元素0的一个指针而已。我们如何才能查看该指针后面的几个变量的值呢?
这是,我们要点击右键,选择【快速监视】,
填写a,5 (形式是aa,xx. aa表示变量地址,xx是元素个数).

结果:

成功查看了后面几个的值。
条件断点:
选择条件后会弹出设置条件的窗口,如下图所示。比如我们输入i==500的时候触发断点。那么当i==500的时候断点才会触发,其它情况下断点不会被触发。
is true 是表达式为真时命中断点
has changed 是值改变时命中断点
内存断点
根据内存地址设置的断点叫做内存断点,Visual Studio中也叫作数据断点。内存断点只有在指定的地址处的变量被修改时,才会触发,访问指定的地址内容是不会触发内存断点的。
应用场景:在很多情况要,一个变量使用的地方过多,我们不知道这个变量在何时何处被修改。使用内存断点就可以轻松搞定。
具体用法:
在程序中断的情况下,一次选择【调试】->【新建断点】->【新建数据断点(D)…】,会弹出如下对话框:

其中字节计数表示变量的类型大小,比如,int占用4个字节。
示例代码:
int test=0;
int main(){
test=1;
}
1
2
3
4
5
设置了上面的内存断点之后,当test被改变的时候就会触发断点,将程序中断在修改内存断点指定的内存地址的语句的下一条语句处,在VS2012中是这样的。
---------------------
最近在开发一个比较复杂的项目,使用了许多assert宏来进行断言防御式编程,但是有的时候发现许多数据被修改了并非自己期望的值。有的时候也不可能为所有数据都提高读写接口封装来控制,这里就需要使用到数据断点来判断数据什么时候被改写了。
MSDN参考文档
https://msdn.microsoft.com/en-us/library/350dyxd0(v=vs.100).aspx
一.使用数据断点的条件
首先数据断点只支持Native code 也就是C/C++开发的代码,而且只能在调试模式下才能设置(程序运行了才能知道你想关注的变量地址)
如果有C#和C/C++混编的项目,也只有C/C++部分的代码支持数据断点。
https://blog.csdn.net/sesiria/article/details/51995370
gdb有同样的命令,内存断点 watch 地址
vs2010 调试中监视变量的更多相关文章
- Visual Studio断点调试, 无法监视变量, 提示无法计算表达式
在使用Visual Studio 2012进行断点调试时,对某个变量添加监视,出现"无法计算表达式"的提示. 解决办法:依次点击菜单栏中的"调试"→" ...
- VS2010调试时,对于一些语句不能单步运行也不能对变量添加监视的问题
在以mfc建立的工程中,需要建立一个链表来保存一些数据.但是在创建结构体,以及对其赋值的过程中,发现对结构体变量不能观察,添加到监视器中的变量也出现变量名不存在的错误. 首先,在文件的开始定义一个结构 ...
- Delphi应用程序的调试(三)监视变量
监视变量(Watching Variables) 当程序停在一个断点处时,用户做些什么呢?通常用户在断点处停下来是要检查变量的值,某个变量的值是否与预料的取值相同?或者某个变量取什么值(事先并不知道这 ...
- Visual Studio 调试系列6 监视变量(使用监视窗口和快速监视窗口)
系列目录 [已更新最新开发文章,点击查看详细] 当你进行调试时,可以使用 监视窗口 和 快速监视窗口 来监视变量和表达式. 仅在调试会话期间,这两个窗口才可用. 监视窗口可以在调试时一次显示多 ...
- AngularJS中监视Scope变量以及外部调用Scope方法
在AngularJS中,有时候需要监视Scope中的某个变量,因为变量的改变会影响一些界面元素的显示.有时,也希望通过jQuery调用Scope的某个方法. 比如以下场景: <div> & ...
- Lua中如何实现类似gdb的断点调试--02通用变量打印
在前一篇01最小实现中,我们实现了Lua断点调试的的一个最小实现.我们编写了一个模块,提供了两个基本的接口:设置断点和删除断点. 虽然我们已经支持在断点进行变量的打印,但是需要自己指定层数以及变量索引 ...
- Lua中如何实现类似gdb的断点调试--03通用变量修改及调用栈回溯
在前面两篇01最小实现及02通用变量打印中,我们已经实现了设置断点.删除断点及通用变量打印接口. 本篇将继续新增两个辅助的调试接口:调用栈回溯打印接口.通用变量设置接口.前者打印调用栈的回溯信息,后者 ...
- makefile中打印变量名字,方便调试
$(warning $(DVD_SERVICE)) // DVD_SerVICE是Makefile中的变量 $(warning ST40_IMPORTS is $(ST40_IMPORTS)) 变 ...
- VS2010 查看代码编辑器中的变量
查看变量的使用情况 1.选中代码中的变量 2.右键 Find Usages
随机推荐
- CVT电子集团--笔试部分试题
之前有在网上答了下CVT的网上笔试题,特别把它们都弄下来,答案参考,不一定是对的,有错希望大家能提出来. 1.有关系R和S,R∩S等价于(B) A.S-(R-S) B.R-(R-S) C.( ...
- C/C++修改常量的值
C/C++中常量修饰const可以用来保证一些确定的量不会被一不小心改变,比如PI,一直是3.14159...... 但是不排除有时候也会需要修改常量的值,通过直接修改是不能达到目的. 比如: #in ...
- C++编程规范之23:头文件应该自给自足
摘要: 各司其责:应该确保所编写的每个头文件都能够独自进行编译,为此需要包含其内容所依赖的所有头文件. 如果一个文件包含某个头文件时,还要包含另一个头文件才能工作,就会增加交流障碍,给头文件的用户增添 ...
- 【转】VPN服务器配置详解
参考博文: VPN服务器配置详解 等公司上服务器开始配置 vpn
- Yii2.0中文开发向导——删除数据
直接 model 删除 $model = User::find($id); $model->delete(); 带有条件的删除 $connection ->createCommand() ...
- js面向对象的三大特性
0x00:使用OOP技术,常常要使用许多的代码模块,每个模块都提供特定的功能,每个模块老师孤立的,甚至与其它的模块完全独立,这种模块化的编程方法大大的提供了代码实现的多样性,大大增加了代码的重用性.j ...
- IOS 单例模式的学习
单例模式只能修改无法释放,直到程序结束. 我们下面一步一步来做一个单例模式程序 (1)单例一旦创建,是永远存在于内存中的,所以需要创建一个全局量 static MySingletonClass *sh ...
- SumoLogic
SumoLogic>>>Loggly. https://diyunpeng.loggly.com/setup MonitorWare http://www.monitorware.c ...
- 基于Visual C++2013拆解世界五百强面试题--题8-数组的排序和查找
用三种方法实现对一个数组的排序,并设计一个函数实现数的查找,要求时间越短越好,空间占用越少越好. 对数组排序的方法很多,我们选比较常用和容易的三种排序,直接插入排序,冒泡排序和快速排序. 直接插入排序 ...
- Java编程思想重点笔记
首先声明转自https://github.com/lanxuezaipiao/ReadingNotes 无意中发现,写的蛮好转过来学习下. 1. Java中的多态性理解(注意与C++区分) Java中 ...