在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 调试中监视变量的更多相关文章

  1. Visual Studio断点调试, 无法监视变量, 提示无法计算表达式

    在使用Visual Studio 2012进行断点调试时,对某个变量添加监视,出现"无法计算表达式"的提示. 解决办法:依次点击菜单栏中的"调试"→" ...

  2. VS2010调试时,对于一些语句不能单步运行也不能对变量添加监视的问题

    在以mfc建立的工程中,需要建立一个链表来保存一些数据.但是在创建结构体,以及对其赋值的过程中,发现对结构体变量不能观察,添加到监视器中的变量也出现变量名不存在的错误. 首先,在文件的开始定义一个结构 ...

  3. Delphi应用程序的调试(三)监视变量

    监视变量(Watching Variables) 当程序停在一个断点处时,用户做些什么呢?通常用户在断点处停下来是要检查变量的值,某个变量的值是否与预料的取值相同?或者某个变量取什么值(事先并不知道这 ...

  4. Visual Studio 调试系列6 监视变量(使用监视窗口和快速监视窗口)

    系列目录     [已更新最新开发文章,点击查看详细] 当你进行调试时,可以使用 监视窗口 和 快速监视窗口 来监视变量和表达式. 仅在调试会话期间,这两个窗口才可用. 监视窗口可以在调试时一次显示多 ...

  5. AngularJS中监视Scope变量以及外部调用Scope方法

    在AngularJS中,有时候需要监视Scope中的某个变量,因为变量的改变会影响一些界面元素的显示.有时,也希望通过jQuery调用Scope的某个方法. 比如以下场景: <div> & ...

  6. Lua中如何实现类似gdb的断点调试--02通用变量打印

    在前一篇01最小实现中,我们实现了Lua断点调试的的一个最小实现.我们编写了一个模块,提供了两个基本的接口:设置断点和删除断点. 虽然我们已经支持在断点进行变量的打印,但是需要自己指定层数以及变量索引 ...

  7. Lua中如何实现类似gdb的断点调试--03通用变量修改及调用栈回溯

    在前面两篇01最小实现及02通用变量打印中,我们已经实现了设置断点.删除断点及通用变量打印接口. 本篇将继续新增两个辅助的调试接口:调用栈回溯打印接口.通用变量设置接口.前者打印调用栈的回溯信息,后者 ...

  8. makefile中打印变量名字,方便调试

    $(warning $(DVD_SERVICE)) // DVD_SerVICE是Makefile中的变量 $(warning   ST40_IMPORTS is $(ST40_IMPORTS)) 变 ...

  9. VS2010 查看代码编辑器中的变量

    查看变量的使用情况 1.选中代码中的变量 2.右键 Find Usages

随机推荐

  1. opengl模板缓冲区

    相信大家有些人对opengl的模板缓冲区不是很理解,包括我最开始也是,opengl的模板缓冲区其实就是采用过滤的技术来控制那些颜色可以绘制,那些不能进行绘制.这里的过滤技术也就是我们的一个控制方法,主 ...

  2. CSS文字样式

    font-family:通常文章的正文使用的是易读性较强的serif字体,用户长时间阅读下不easy疲劳.而标题和表格则採用较醒目的sans-serif字体.Web设计及浏览器设置中也推荐遵循此原则. ...

  3. 【转】sqlserver数据库之间的表的复制

    以下以数据库t1和test为例.  1.复制表结构及资料 select * into 数据库名.dbo.表名 from 源表(全部数据)     如:select * into t1.dbo.YS1 ...

  4. ADO.NET详解----核心对象的使用

    一.Connection对象 指定某个具体数据源以及提供登陆方式及用户名与密码. Connection对象的主要成员: 1.ConnectionString属性:连接字符串,指定要操作的数据库以及登录 ...

  5. sql表连接的几种方式

    这里有两张表TableA和TableB,分别是姓名表和年龄表,用于我们例子的测试数据 TableA id name 1 t1 2 t2 4 t4 TableB id age 1 18 2 20 3 1 ...

  6. BestCoder Round #46

    1001 YJC tricks time 题目链接:1001 题意:给你时针和分针所成的角度,输出现在的时间,以10秒为单位 思路:每10秒,分针走1度,时针走分针的1/12,我们可以根据时间来分别计 ...

  7. BZOJ 1266: [AHOI2006]上学路线route(最短路+最小割)

    第一问最短路.第二问,先把最短路的图建出来(边(u,v)满足d[s->u]+d[v->t]+d(u,v)==最短路径长度,就在图中,可以从源点和汇点分别跑一次最短路得到每个点到源点和汇点的 ...

  8. JVM典型配置

    堆大小设置: JVM中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制:系统的可用虚拟内存限制:系统的可用物理内存 限制.32位系统下,一般限制在1.5G~2G:64为 ...

  9. net-snmp启用python模块

    1. http://blog.jeoygin.org/2011/09/centos-5-install-python-2-6-and-python-setuptools-2-6.html 2. htt ...

  10. php扩展类开发实例

    class Vector2D { private $_x; private $_y; /** * Constructor. */ public function __construct($x = 0, ...