调试模式下内存窗口的使用

在调试期间,“内存”窗口显示应用使用的内存空间。
调试器窗口(如“监视”、“自动”、“局部变量”和“快速监视”对话框 )会显示存储于内存中特定位置的变量。 “内存”窗口显示总体概况。 内存视图对于检查大片的数据(如缓冲区和大的字符串)很方便,这些内容在其他窗口中显示得不太好。

打开“内存”窗口
与其他调试器窗口一样,“内存”窗口仅在调试会话期间可用。

在“内存”窗口中四处移动
计算机的地址空间很大,在“内存”窗口中滚动可能会轻易地失去位置。
较高的内存地址显示在窗口的底部。 若要查看较高的地址,请向下滚动。 若要查看较低的地址,请向上滚动。

通过使用拖放操作或在“地址”字段中输入地址,可以立即在“内存”窗口中转到指定地址。 “地址”字段接受字母数字地址和计算结果为地址的表达式,如 e.User.NonroamableId

若要强制立即重新计算“地址”字段中的表达式,请选择圆角箭头“ 自动重新计算”图标。

默认情况下,“内存”窗口将“地址”表达式视为实时表达式,它们会在应用运行时重新计算 。 实时表达式可能十分有用,例如,可用于查看指针变量所涉及的内存。

若要使用拖放操作移动到内存位置,请执行以下操作:

  1. 在任一调试器窗口中,选择内存地址或选择包含内存地址的指针变量。

  2. 将地址或指针拖动到“内存”窗口中。 该地址随后会出现在“地址”字段中,“内存”窗口将调整为在顶部显示该地址。

若要通过在“地址”字段中输入内存位置来移动到该位置,请执行以下操作:

  • 在“地址”字段中键入或粘贴地址或表达式,然后按 Enter,或从“地址”字段中的下拉列表中选择它。 “内存”窗口将调整为在顶部显示该地址。

使用“监视”和“快速监视”窗口监视变量

利用内存窗口查看函数调用堆栈的变化

参考链接:

在调试器中查看变量的内存 - Visual Studio | Microsoft Docs  https://docs.microsoft.com/zh-cn/visualstudio/debugger/memory-windows?view=vs-2019

对变量设置监视 - Visual Studio | Microsoft Docs  https://docs.microsoft.com/zh-cn/visualstudio/debugger/watch-and-quickwatch-windows?view=vs-2019

查看内存分布

这里不妨说下C++内存分布结构,我们来看看编译器是怎么处理类成员内存分布的,特别是在继承、虚函数存在的情况下。

先选择左侧的C/C++->命令行,然后在其他选项这里写上/d1 reportAllClassLayout,它可以看到所有相关类的内存布局,如果写上

/d1 reportSingleClassLayoutXXX(XXX为类名),则只会打出指定类XXX的内存布局。

/d1 reportAllClassLayout

/d1 reportSingleClassLayout

测试代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
class Dempty {
public:
    Dempty() {}
    ~Dempty() {}
    void print() const printf("empty class \r\n"); }
 
};
 
int main()
{
    int size = sizeof(Dempty);
    printf("%d \r\n", size);//空类的大小为1字节
}

    

/d1 reportSingleClassLayoutDempty

Visual Studio 命令行编译C和C++程序

参考链接:演练:在命令行上编译本机 C++ 程序 | Microsoft Docs

https://docs.microsoft.com/zh-cn/cpp/build/walkthrough-compiling-a-native-cpp-program-on-the-command-line?view=vs-2019

visual studio 查看内存f分布:cl -d1reportSingleClassLayout

PS D:\ufile\arena\visualstudio\ConsoleApplication1\ConsoleApplication1>  cl -d1reportSingleClassLayoutDempty .\ConsoleApplication1.cpp
用于 x86 的 Microsoft (R) C/C++ 优化编译器 19.27.29111 版
版权所有(C) Microsoft Corporation。保留所有权利。
 
ConsoleApplication1.cpp
 
class Dempty    size(1):
        +---
        +---
Microsoft (R) Incremental Linker Version 14.27.29111.0
Copyright (C) Microsoft Corporation.  All rights reserved.
 
/out:ConsoleApplication1.exe
ConsoleApplication1.obj
PS D:\ufile\arena\visualstudio\ConsoleApplication1\ConsoleApplication1>

  

参考链接:

visual studio cl -d1reportSingleClassLayout查看内存f分布 - osc_fzp57c02的个人空间 - OSCHINA - 中文开源技术交流社区  https://my.oschina.net/u/4341677/blog/3498447

使用Visual Studio查看C++类内存分布_Enjoy Coding-CSDN博客  https://blog.csdn.net/ywcpig/article/details/52550584

Visual Studio中如何查看变量内存_lucky_fly的专栏-CSDN博客  https://blog.csdn.net/lucky_fly/article/details/103336741

Visual Studio程序调试如何查看堆栈_lucky_fly的专栏-CSDN博客  https://blog.csdn.net/lucky_fly/article/details/103336238

visual studio debug内存查看方法_lauyun的博客-CSDN博客  https://blog.csdn.net/lauyun/article/details/105580798

在VisualStudio调试器中使用内存窗口和查看内存分布的更多相关文章

  1. vs2013 使用vs调试器,发现调试器显示的数据错误。查看内存,发现内存是正确的。

    有可能只是调试器的问题,程序可以正常运行的! 网上没找到此种情况解释.感觉有可能是那里堆被破坏了.

  2. 在Visual Studio调试器中显示Unreal的数据类型的值

    转自:https://blog.csdn.net/witton/article/details/5977766 在Unreal引擎中大量使用了自定义的数据类型如:FName,FString,TArra ...

  3. 用DebuggerDisplay在Visual Studio的调试器中定制类的显示方式

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:用DebuggerDisplay在Visual Studio的调试器中定制类的显示方式.

  4. 在 Visual Studio 调试器中指定符号 (.pdb) 和源文件

    查找并指定符号文件和源文件:指定符号加载行为.使用符号和源服务器上:加载符号自动或在要求.   内容 查找符号 (.pdb) 文件 查找源文件   查找符号 (.pdb) 文件 说明 在之前的 Vis ...

  5. 自定义Visual Studio调试器中的对象显示方式

    你有没有盯着调试器窗口中的对象,并希望你可以通过其他类型的东西来查看这些对象?我当然有!扩展项目以确定每个人的身份可能会非常快速.理想情况下,通过特定的属性值快速定位它们会很棒.对我们来说幸运的是,V ...

  6. @清晰掉 GDB调试器中的战斗机

    GDB 的命令很多,本文不会全部介绍,仅会介绍一些最常用的.在介绍之前,先介绍GDB中的一个非常有用的功能:补齐功能.它就如同Linux下SHELL中的命令补齐一样.当你输入一个命令的前几个字符,然后 ...

  7. 关于调试器中int3断点引发异常的思考

    INT3断点 INT3断点是利用0Xcc指令实现的,cpu在执行0xcc指令时会引发断点异常调试器会捕捉这个异常. INT3断点引发的异常属于陷阱型异常,在执行完0xcc指令后eip指向下一条指令.但 ...

  8. 【查看内存】Linux查看内存使用情况(二)

    Linux查看CPU和内存使用情况:http://www.cnblogs.com/xd502djj/archive/2011/03/01/1968041.html 在做Linux系统优化的时候,物理内 ...

  9. 【查看内存】Linux查看内存使用情况(一)

    用 'top -i' 看看有多少进程处于 Running 状态,可能系统存在内存或 I/O 瓶颈,用 free 看看系统内存使用情况,swap 是否被占用很多,用 iostat 看看 I/O 负载情况 ...

随机推荐

  1. Linux 组网入门(转)

    转至:https://blog.csdn.net/cuijiao1893/article/details/100397875 Linux 组网入门(转)[@more@]WEB 服务器 现在在Inter ...

  2. shell脚本上传sftp文件

    转至:https://blog.csdn.net/sxh6365966/article/details/83385711 #!/bin/bash #SFTP配置信息 #用户名 YEARS=`date ...

  3. Python数据可视化 -- Wordcloud

    Python数据可视化 -- Wordcloud 安装 启动命令行,输入:pip install wordcloud word cloud 库介绍 及简单使用 wordcloud库,可以说是pytho ...

  4. MySQL第五讲

    内容回顾 单表操作 """ 1.配置文件先统一设置成utf8 \s 2.无论你怎么改都没有生效 你的机器上不止一个mysql文件 C有一个 D有一个 3.百度搜索 sho ...

  5. MySQL日常笔记第二讲

    今日内容概要 存储引擎 MySQL的数据类型 约束条件 今日内容详细 存储引擎 """ 针对不同的数据可以有不同的存储方式 存储引擎就相当于针对数据采用不同的存储方式 & ...

  6. 超好用的Markdown编辑器Typora中的常见语法

    目录 下载网址 安装 一.标题 一级标题 二级标题 三级标题 四级标题 五级标题 六级标题 二.语法环境 三.单选 四.字体 五.分割符 六.列表 七.图片引入 八.表格 九.超链接 下载网址 正版中 ...

  7. Java 类方法和类变量

    目录 一.类变量 1.如果定义类变量 2.如何访问类变量 3.类变量的使用注意事项和细节 二.类方法 1.类方法的形式 2.类方法的调用 3.类方法经典使用场景 4.类变量和类方法 三.main方法 ...

  8. LeetCode-026-删除有序数组中的重复项

    删除有序数组中的重复项 题目描述:给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度. 不要使用额外的数组空间,你必须在 原地 修改输入数组 ...

  9. laravel 解决跨域问题并封装到中间件

    larav 官方手册有详细的步骤 https://learnku.com/articles/6504/laravel-cross-domain-solution 我们在用 laravel 进行开发的时 ...

  10. php简易表单及下拉框动态渲染

    <?php//1.连接数据库$link = mysqli_connect('127.0.0.1','root','root','1906');//2.设置字符集mysqli_set_charse ...