在 Visual Studio 偵錯工具 (C#、C++、Visual Basic、F#) 中使用記憶體視窗

在偵錯期間,[記憶體] 視窗會顯示您應用程式正在使用的記憶體空間。

[監看式]、[自動變數]、[區域變數] 和 [快速監看式] 對話方塊等偵錯工具視窗會顯示儲存在記憶體中特定位置的變數。 [記憶體] 視窗會顯示整體圖片。 記憶體檢視對於檢查無法適當地顯示在其他視窗的大批資料 (例如,緩衝區或很大的字串) 來說極為方便。

[記憶體] 視窗的功能並不只侷限於顯示資料。 其還會顯示記憶體空間內的所有內容,包含資料、程式碼和未指派記憶體內的無意義資料。

[記憶體] 視窗不適用於指令碼或 SQL 偵錯。 這些語言無法辨識記憶體的概念。

開啟記憶體視窗

與其他偵錯工具視窗一樣,[記憶體] 視窗只能在偵錯工作階段期間使用。

重要

若要啟用 [記憶體] 視窗,必須在 [工具]>[選項] (或 [偵錯]>[選項]) >[偵錯]>[一般] 中選取 [啟用位址層級偵錯]。

開啟記憶體視窗

  1. 確定已在 [工具]>[選項] (或 [偵錯]>[選項]) >[偵錯]>[一般] 中選取 [啟用位址層級偵錯]。

  2. 選取綠色箭頭、按 F5,或是選取 [偵錯]>[開始偵錯]

  3. 在 [偵錯]>[Windows]>[記憶體] 下,選取 [記憶體 1]、[記憶體 2]、[記憶體 3] 或 [記憶體 4]。 (某些 Visual Studio 版本只提供一個 [記憶體] 視窗。)

在 [記憶體] 視窗中四處移動

電腦的位址空間很大,您在 [記憶體] 視窗中捲動很容易就會找不到位置。

較高的記憶體位址會出現在視窗底部。 若要檢視較高的位址,請向下捲動。 若要檢視較低的位址,請向上捲動。

您可以使用拖放功能,或在 [位址] 欄位中輸入位址,立即移至 [記憶體] 視窗中的指定位址。 [位址] 欄位會接受英數字元位址,以及評估為位址的運算式,例如 e.User.NonroamableId

若要在 [位址] 欄位中強制立即重新評估運算式,請選取圓角箭號 [自動評估] 圖示。

根據預設,[記憶體] 視窗會將 [位址] 運算式視為即時運算式,這會在應用程式執行時重新評估。 例如,即時運算式可用來檢視指標變數所接觸的記憶體。

若要使用拖放來移至記憶體位置:

  1. 在任何偵錯工具視窗中選取記憶體位址或含記憶體位址的指標變數。

  2. 在 [記憶體] 視窗中拖放位址或指標。 該位址接著會出現在 [位址] 欄位中,而 [記憶體] 視窗會調整為在頂端顯示該位址。

若要在 [位址] 欄位中輸入記憶體位置以移至該記憶體位置:

  • 在 [位址] 欄位中輸入或貼上位址或運算式,然後按 Enter 鍵,或從 [位址] 欄位中的下拉式清單中選擇位址或運算式。 [記憶體] 視窗會調整為在頂端顯示該位址。

自訂 [記憶體] 視窗

根據預設,記憶體內容會在十六進位格式中以 1 位元組整數資料型別出現,而且顯示的欄位數會依據視窗寬度來決定。 您可以自訂 [記憶體] 視窗顯示記憶體內容的方式。

變更記憶體內容格式:

  • 在 [記憶體] 視窗中按一下滑鼠右鍵,然後從操作功能表中選擇您需要的格式。

變更記憶體視窗中的欄位數目:

  • 選取 [資料行] 欄位旁的下拉箭號,然後選取要顯示的資料行數目,或選取 [自動] 以根據視窗寬度自動調整。

如果不希望 [記憶體] 視窗內容在應用程式執行時進行變更,您可以關閉實況運算式評估。

切換實況評估:

  • 在 [記憶體] 視窗中按一下滑鼠右鍵,然後選取操作功能表中的 [自動重新評估]

    注意

    即時運算式評估是一個切換,且預設為開啟,因此選取 [自動重新評估] 會將其關閉。 再次選取 [自動重新評估] 會將其重新開啟。

您可以在 [記憶體] 視窗的頂端隱藏或顯示工具列。 當工具列隱藏時,您將無法存取 [位址] 欄位或其他工具。

若要切換工具列顯示:

  • 在 [記憶體] 視窗中按一下滑鼠右鍵,然後選取操作功能表中的 [顯示工具列]。 工具列會不會出現,需視先前的狀態而定。

隨著記憶體變動指標 (C/C++)

您也可以在機器碼應用程式中,將暫存器名稱當成機動性的運算式。 例如,您可使用堆疊指標隨著堆疊而變動位置。

隨著記憶體變動指標:

  1. 在 [記憶體] 視窗的 [位址] 欄位中,輸入目前範圍內的指標運算式。 有時您可能會需要取值 (Dereference),視語言而定。

  2. Enter

    當您使用 [步驟] 之類的偵錯命令時,[位址] 欄位中以及 [記憶體] 視窗頂端所顯示的記憶體位址會在指標變更時自動變更。

檢視記憶體指標 (.NET)

如果您想要根據記憶體指標來檢視 .NET 物件的內容,例如從堆積快照中取得的位址,您可以使用 {CLR}@Address 標記法執行此動作。 位址必須是記憶體的指標,例如 0x1D102A581B0。 在 [記憶體] 視窗的 [位址] 欄位中,使用 {CLR}@Address 標記法輸入記憶體指標。 或者,您可以使用相同的標記法,使用 [監看式] 視窗來新增監看式。

若要從堆積快照取得記憶體指標位址,請開啟堆積傾印,選擇 [偵錯受控記憶體],[記憶體使用量] 工具便會開啟。 以滑鼠右鍵按一下您想查看的物件,然後選擇 [檢視執行個體]