調試模式下內存窗口的使用
在調試期間,“內存”窗口顯示應用使用的內存空間。
調試器窗口(如“監視”、“自動”、“局部變量”和“快速監視”對話框 )會顯示存儲於內存中特定位置的變量。 “內存”窗口顯示總體概況。 內存視圖對於檢查大片的數據(如緩沖區和大的字符串)很方便,這些內容在其他窗口中顯示得不太好。
打開“內存”窗口
與其他調試器窗口一樣,“內存”窗口僅在調試會話期間可用。
在“內存”窗口中四處移動
計算機的地址空間很大,在“內存”窗口中滾動可能會輕易地失去位置。
較高的內存地址顯示在窗口的底部。 若要查看較高的地址,請向下滾動。 若要查看較低的地址,請向上滾動。
通過使用拖放操作或在“地址”字段中輸入地址,可以立即在“內存”窗口中轉到指定地址。 “地址”字段接受字母數字地址和計算結果為地址的表達式,如 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
測試代碼
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