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

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

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

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

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

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

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

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

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

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

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

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

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

在“地址”字段中键入或粘贴地址或表达式,然后按 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

测试代码

#include

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

相关推荐

电锅漏电的原因及解决方法
亚洲365世界杯

电锅漏电的原因及解决方法

📅 08-28 👁️ 9870
正在阅读:新浪微博中转发到微信朋友圈的具体操作流程新浪微博中转发到微信朋友圈的具体操作流程
秘密派游戏下载-秘密派secret pie绿色中文版v1.7.1下载
Intel Core i5-4590 vs Intel Core i5-4590T — 的对比 - 处理器特性的比较
张雪机车开始预定,你会下单么
365bet在线手机版

张雪机车开始预定,你会下单么

📅 09-24 👁️ 3967
【雷锋之歌⑧】今天,一起唱响《永远的雷锋》
亚洲365世界杯

【雷锋之歌⑧】今天,一起唱响《永远的雷锋》

📅 01-23 👁️ 1539
教你怎么看苹果手机操作系统版本号?怎么看IOS几
365bet在线手机版

教你怎么看苹果手机操作系统版本号?怎么看IOS几

📅 07-08 👁️ 5071
魔兽世界席瓦娜的苍穹法杖怎么获得
亚洲365世界杯

魔兽世界席瓦娜的苍穹法杖怎么获得

📅 01-02 👁️ 6237
​甩锅局什么意思,甩锅这个名词的典故出自哪里?