在 Visual Studio 偵錯工具 (C#、C++、Visual Basic、F#) 中使用記憶體視窗
在偵錯期間,[記憶體] 視窗會顯示您應用程式正在使用的記憶體空間。
[監看式]、[自動變數]、[區域變數] 和 [快速監看式] 對話方塊等偵錯工具視窗會顯示儲存在記憶體中特定位置的變數。 [記憶體] 視窗會顯示整體圖片。 記憶體檢視對於檢查無法適當地顯示在其他視窗的大批資料 (例如,緩衝區或很大的字串) 來說極為方便。
[記憶體] 視窗的功能並不只侷限於顯示資料。 其還會顯示記憶體空間內的所有內容,包含資料、程式碼和未指派記憶體內的無意義資料。
[記憶體] 視窗不適用於指令碼或 SQL 偵錯。 這些語言無法辨識記憶體的概念。
開啟記憶體視窗
與其他偵錯工具視窗一樣,[記憶體] 視窗只能在偵錯工作階段期間使用。
重要
若要啟用 [記憶體] 視窗,必須在 [工具]>[選項] (或 [偵錯]>[選項]) >[偵錯]>[一般] 中選取 [啟用位址層級偵錯]。
開啟 [記憶體] 視窗:
確定已在 [工具]>[選項] (或 [偵錯]>[選項]) >[偵錯]>[一般] 中選取 [啟用位址層級偵錯]。
選取綠色箭頭、按 F5,或是選取 [偵錯]>[開始偵錯]。
在 [偵錯]>[Windows]>[記憶體] 下,選取 [記憶體 1]、[記憶體 2]、[記憶體 3] 或 [記憶體 4]。 (某些 Visual Studio 版本只提供一個 [記憶體] 視窗。)
多個視窗可讓您同時維護記憶體空間中不同區域的檢視。
在 [記憶體] 視窗中四處移動
電腦的位址空間很大,您在 [記憶體] 視窗中捲動很容易就會找不到位置。
較高的記憶體位址會出現在視窗底部。 若要檢視較高的位址,請向下捲動。 若要檢視較低的位址,請向上捲動。
在大部分情況下,您想要尋找特定的記憶體位置。
尋找記憶體位置
您可以使用拖放功能,或在 [位址] 欄位中輸入位址,立即移至 [記憶體] 視窗中的指定位址。 [位址] 欄位會接受英數字元位址,以及評估為位址的運算式,例如 e.User.NonroamableId
。
若要在 [位址] 欄位中強制立即重新評估運算式,請選取圓角箭號 [自動評估] 圖示。
根據預設,[記憶體] 視窗會將 [位址] 運算式視為即時運算式,這會在應用程式執行時重新評估。 例如,即時運算式可用來檢視指標變數所接觸的記憶體。
使用拖放來移至記憶體位置:
在任何偵錯工具視窗中選取記憶體位址或含記憶體位址的指標變數。
在 [記憶體] 視窗中拖放位址或指標。
該位址會出現在 [ 位址 ] 字段中,而 [ 記憶體 ] 視窗會調整為在頂端顯示該位址。
在 [位址] 欄位中輸入位置以移至記憶體位置:
在 [位址] 欄位中輸入或貼上位址或運算式,然後按 Enter 鍵,或從 [位址] 欄位中的下拉式清單中選擇位址或運算式。
該位址會出現在 [ 位址 ] 字段中,而 [ 記憶體 ] 視窗會調整為在頂端顯示該位址。
自訂 [記憶體] 視窗
根據預設,記憶體內容會在十六進位格式中以 1 位元組整數資料型別出現,而且顯示的欄位數會依據視窗寬度來決定。 您可以自訂 [記憶體] 視窗顯示記憶體內容的方式。
變更記憶體內容的格式:
- 在 [記憶體] 視窗中按一下滑鼠右鍵,然後從操作功能表中選擇您需要的格式。
變更 [記憶體] 視窗中的數據列數目:
- 選取 [資料行] 字段旁的下拉式箭號,然後選取要顯示的數據行數目,或選取 [自動] 以根據視窗寬度自動調整。
如果不希望 [記憶體] 視窗內容在應用程式執行時進行變更,您可以關閉實況運算式評估。
切換即時評估:
在 [記憶體] 視窗中按一下滑鼠右鍵,然後選取操作功能表中的 [自動重新評估]。
注意
即時運算式評估是一個切換,且預設為開啟,因此選取 [自動重新評估] 會將其關閉。 再次選取 [自動重新評估] 會將其重新開啟。
您可以在 [記憶體] 視窗的頂端隱藏或顯示工具列。 當工具列隱藏時,您將無法存取 [位址] 欄位或其他工具。
切換工具列顯示:
- 在 [記憶體] 視窗中按一下滑鼠右鍵,然後選取操作功能表中的 [顯示工具列]。 工具列會不會出現,需視先前的狀態而定。
隨著記憶體變動指標 (C/C++)
您也可以在機器碼應用程式中,將暫存器名稱當成機動性的運算式。 例如,您可使用堆疊指標隨著堆疊而變動位置。
透過記憶體追蹤指標:
在 [記憶體] 視窗的 [位址] 欄位中,輸入目前範圍內的指標運算式。 有時您可能會需要取值 (Dereference),視語言而定。
按 Enter。
當您使用 [步驟] 之類的偵錯命令時,[位址] 欄位中以及 [記憶體] 視窗頂端所顯示的記憶體位址會在指標變更時自動變更。
檢視記憶體指標 (.NET)
如果您想要根據記憶體指標來檢視 .NET 物件的內容,例如從堆積快照中取得的位址,您可以使用 {CLR}@Address
標記法執行此動作。 位址必須是記憶體的指標,例如 0x1D102A581B0。 在 [記憶體] 視窗的 [位址] 欄位中,使用 {CLR}@Address
標記法輸入記憶體指標。 或者,您可以使用相同的標記法,使用 [監看式] 視窗來新增監看式。
若要從堆積快照取得記憶體指標位址,請開啟堆積傾印,選擇 [偵錯受控記憶體],[記憶體使用量] 工具便會開啟。 以滑鼠右鍵按一下您想查看的物件,然後選擇 [檢視執行個體]。