在VisualStudio調試器中使用內存窗口和查看內存分布


調試模式下內存窗口的使用

在調試期間,“內存”窗口顯示應用使用的內存空間。
調試器窗口(如“監視”、“自動”、“局部變量”和“快速監視”對話框 )會顯示存儲於內存中特定位置的變量。 “內存”窗口顯示總體概況。 內存視圖對於檢查大片的數據(如緩沖區和大的字符串)很方便,這些內容在其他窗口中顯示得不太好。

打開“內存”窗口
與其他調試器窗口一樣,“內存”窗口僅在調試會話期間可用。

在“內存”窗口中四處移動
計算機的地址空間很大,在“內存”窗口中滾動可能會輕易地失去位置。
較高的內存地址顯示在窗口的底部。 若要查看較高的地址,請向下滾動。 若要查看較低的地址,請向上滾動。

通過使用拖放操作或在“地址”字段中輸入地址,可以立即在“內存”窗口中轉到指定地址。 “地址”字段接受字母數字地址和計算結果為地址的表達式,如 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM