在VisualStudio调试器中使用内存窗口和查看内存分布

摘要:
在调试模式下使用内存窗口在调试期间,内存窗口显示应用程序使用的内存空间。打开内存窗口与其他调试器窗口一样,内存窗口仅在调试会话期间可用。使用拖放移动到内存位置:在任何调试器窗口中,选择内存地址或选择包含内存地址的指针变量。地址随后出现在地址字段中,“内存”窗口将进行调整,使其显示在顶部。View=vs-2019visualstudio查看内存分布:cl-d1reportSingleClassLayoutPSD:ufilearenavisualstudioConsoleApplication1ConsoleApplication1˃cl-d1reportSingleClassLayoutDempty.ConsoleApplication1.cpp适用于x86版本19.27.29111的Microsoft C/C++优化编译器保留所有权利。

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

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

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

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

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

在VisualStudio调试器中使用内存窗口和查看内存分布第1张

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

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

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

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

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

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

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

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

在VisualStudio调试器中使用内存窗口和查看内存分布第2张

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

在VisualStudio调试器中使用内存窗口和查看内存分布第3张

参考链接:

在调试器中查看变量的内存 - 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++内存分布结构,我们来看看编译器是怎么处理类成员内存分布的,特别是在继承、虚函数存在的情况下。

在VisualStudio调试器中使用内存窗口和查看内存分布第4张

 先选择左侧的C/C++->命令行,然后在其他选项这里写上/d1 reportAllClassLayout,它可以看到所有相关类的内存布局,如果写上/d1 reportSingleClassLayoutXXX(XXX为类名),则只会打出指定类XXX的内存布局。

/d1 reportAllClassLayout 

/d1 reportSingleClassLayout

在VisualStudio调试器中使用内存窗口和查看内存分布第5张

 测试代码

#include <iostream>
class Dempty {
public:
	Dempty() {}
	~Dempty() {}
	void print() const { printf("empty class 
"); }

};

int main()
{
    int size = sizeof(Dempty);
    printf("%d 
", size);//空类的大小为1字节
}

    

/d1 reportSingleClassLayoutDempty 

在VisualStudio调试器中使用内存窗口和查看内存分布第6张

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

在VisualStudio调试器中使用内存窗口和查看内存分布第7张

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

PS D:ufilearenavisualstudioConsoleApplication1ConsoleApplication1>  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:ufilearenavisualstudioConsoleApplication1ConsoleApplication1>

  

参考链接:

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调试器中使用内存窗口和查看内存分布》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇SQL server约束OpenGL学习——搭建OpenGL运行环境——生成一个空白视口——基于GLFW&amp;amp;GLEW下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

centos6配置网卡

#设置开机启动和静态地址 vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 HWADDR=D8:50:E6:56:3F:CF TYPE=Ethernet UUID=47bdf2d3-0132-4481-8475-28bd0e8e456b ONBOOT=yes #此处改为yes...

如何在Ubuntu 20.04 / 18.04或更老版本中安装ifconfig

Ubuntu Linux是最流行的操作系统之一,因此,如果你正在使用它,并希望使用Ifconfig命令查看系统的Ip地址,那么有办法安装它。就像在Windows中的ipconfig一样,我们有ifconfig for Linux操作系统来获取和使用命令行查看所有可用的网络适配器的Ip地址。然而,默认情况下,它不会出现在你的Ubuntu系统中,这需要手动安装...

kernel内存、地址【转】

转自:https://blog.csdn.net/ivychend/article/details/79785303 1 物理地址、虚拟地址、总线地址2 编址方式2.1 外设访问2.1.1 映射3 虚拟地址映射4 内存布局4.1 动态映射区4.2 永久映射区4.3 固定映射区4.4 high memory4.5 DMA4.6 实际内存布局5 /proc/目...

ubuntu建立文件或者文件夹软链接

文件夹建立软链接(用绝对地址)   ln -s 源地址  目的地址   比如我把linux文件系统rootfs_dir软链接到/home/jyg/目录下   ln -s /opt/linux/rootfs_dir  /home/jyg/rootfs_dir就可以了 删除软连接: rm -rf 目的地址 比如:rm -rf /home/jyg/rootfs_...

arp报文格式解析

arp报文格式 arp报文总共42 bytes。其中以太网首部14 bytes,arp字段28字节 一、以太网首部 如下图中:目的mac地址和源mac地址各6 bytes,以太网帧类型2 bytes 二、arp字段 arp字段如下图:从上往下依次是:硬件类型、协议类型、硬件大小、协议大小、op位、发送者mac、发送者ip、目的mac、目的ip 硬件类...

UNIX环境高级编程——网络基础概念

TCP协议分成两个不同的协议:1、网络传输中差错的传输控制协议TCP 2、专门负责对不同网络进行互联的互联网协议IP 网络体系结构概念: 网络体系结构即是指网络的层次结构和每层所使用协议的集合 OSI:(Open System Interconnect Reference Model) ISO:国际标准化组织(International Standard...