在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. GLView基本分析

    GLView是cocos2d-x基于OpenGL ES的调用封装UI库. OpenGL本身是跨平台的计算机图形实现API,在每一个平台的详细实现是不一样.所以每次使用之前先要初始化,去设置平台相关的信 ...

  2. Tomcat 的context.xml

    1. 在tomcat 5.5之前: --------------------------------------------------------------- Context体如今/conf/se ...

  3. c 结构体struct

    struct 定义初始化 #include<stdio.h> typedef struct stuInfo { ]; //姓名 int stuId; //学号 int age; //年龄 ...

  4. java中如何获取系统时间

    需要引入的包有: import java.util.Date; 此为获取当前系统时间,合适为“1991-01-01” String now = "";    SimpleDateF ...

  5. UVa1225 Digit Counting

    #include <stdio.h>#include <string.h> int main(){    int T, N, i, j;    int a[10];    sc ...

  6. Java学习之内部类

    示例1: package com.swust.面向对象; class Person1{ private String username="zhangsan"; public Per ...

  7. Win7下安装Apache+PHP+MySQL

    Win 7 下搭建 WAMP 环境本文安装方法适用于 Windows7 下的 Apache + MySQL + PHP(WAMP)安装,同时也适用于 Windows XP 系统下的安装和配置.一.安装 ...

  8. ThinkPHP第十五天(setField、setInc、setDec、关联模型)

    1.ThinkPHP中的比较特殊连贯操作 如果要更新某个字段可以用setField方法,比如M('user')->where('id=1')->setField('username','T ...

  9. Spark学习资料

    1. 倾情大奉送--Spark入门实战系列 2. Spark GraphX: http://blog.csdn.net/bluejoe2000/article/details/44308167

  10. C单链表实现

    /* * LinkNode.c * * Created on: Jan 14, 2014 * Author: root */ #include <stdlib.h> #include &l ...