使用監看式視窗 - WinDbg (傳統)
[監看式] 視窗會顯示全域變數、區域變數和暫存器的相關資訊。 您可以自訂此視窗以顯示您要追蹤的專案。
開啟監看式視窗
若要開啟或切換至 [監看式] 視窗,請在 WinDbg 視窗中,按一下 [ 檢視 ] 功能表上的 [ 監看式]。
您也可以按 ALT+2,或按一下工具列上的 [ 監看式] (ALT+2) 按鈕:
ALT+SHIFT+2 會關閉 [監看式] 視窗。
下列螢幕擷取畫面顯示 [監看式] 視窗的範例。
[監看式] 視窗可以包含四個數據行。 [ 名稱 ] 和 [ 值 ] 資料行一律會顯示,而 [類型 ] 和 [ 位置] 資料行是選擇性的。 若要顯示 [類型 ] 和 [ 位置] 資料行,請按一下工具列上的 [類型傳播 ] 和 [ 位置 ] 按鈕。
在 [監看式] 視窗中,您可以執行下列動作:
若要將變數新增至 [監看式] 視窗,請選取 [ 名稱 ] 資料行中的第一個空白儲存格,輸入變數名稱,然後按 ENTER 鍵。 以驚嘆號分隔模組名稱與變數, (!) 。 如果您未指定模組,則會使用目前的模組。 若要在 [ 名稱 ] 欄位中輸入位址,位址必須視需要以十進位數開頭, (,請使用前置詞 0x) 。
如果您輸入的變數名稱定義在目前函式的範圍中,其值會出現在 [ 值 ] 資料行中。 如果未定義, [值] 資料行會顯示「錯誤:無法取得值」。
即使未定義變數,將它新增至 [監看式] 視窗也很有用。 如果程式計數器輸入函式,在此函式中定義此名稱的變數,則其值會出現在該時間範圍中。
若要從 [監看式] 視窗移除變數,請按兩下其名稱,按 DELETE,然後按 ENTER 鍵。 您也可以按兩下舊名稱、輸入新名稱,然後按 ENTER 鍵,以新名稱取代舊名稱。
如果變數是資料結構,則其名稱旁邊會出現核取方塊。 若要展開和折迭結構成員的顯示,請選取或清除核取方塊。
int類型的整數會顯示為十進位值;UINT類型的整數會顯示在目前的基數中。 若要變更目前的基數,請使用 [偵錯工具命令] 視窗中 的 n ([設定數位基底) ] 命令。
若要變更區域變數的值,請按兩下其 Value 儲存格。 輸入新值,或編輯舊值。 (剪下、複製和貼上命令可用於編輯。) 您輸入的值可以包含任何 C++ 運算式。 輸入新值或編輯舊值之後,您可以按 ENTER 來儲存新的值,或按 ESC 來捨棄該值。 如果您提交不正確值,當您按下 ENTER 鍵之後,舊值就會重新出現。
int類型的整數會顯示為十進位值;UINT類型的整數會顯示在目前的基數中。 若要變更目前的基數,請使用 [偵錯工具命令] 視窗中 的 n ([設定數位基底) ] 命令。
如果 [監看式] 視窗中顯示類型資料行, () 顯示每個變數的目前資料類型。 每個變數都會以適合其本身資料類型的格式顯示。 資料結構在 Type 資料行中有其類型名稱。 其他變數類型會顯示此資料行中的「輸入新類型」。
如果您按兩下 [輸入新類型],您可以輸入新的資料類型來轉換類型。 此轉換只會在 [監看式] 視窗中改變此變數的目前顯示;它不會變更偵錯工具或目的電腦上的任何專案。 此外,如果您在 [ 值 ] 資料行中輸入新值,則會根據符號的實際類型來剖析您輸入的文字,而不是您在 [ 類型 ] 資料行中輸入的任何新類型。 如果您關閉並重新開啟 [監看式] 視窗,將會遺失資料類型變更。
您也可以在 [類型] 資料行中輸入擴充命令。 偵錯工具會將符號的位址傳遞至此延伸模組,並在目前資料列下方的一系列可折迭資料列中顯示產生的輸出。 例如,如果此資料列中的符號是執行緒環境區塊的有效位址,您可以在[類型] 資料行中輸入!teb,在此符號的位址上執行!teb延伸模組。
[ 位置] 資料行 (如果在 [監看式] 視窗中顯示,) 顯示資料結構中每個成員的位移。
除了變數之外,您也可以在 [監看式] 視窗中監視下列專案:
- 寄存 器。 當您將暫存器新增至 [監看式] 視窗時,請在其名稱前面 @ 加上 () 。 不同于變數,您無法透過 [監看式] 視窗變更暫存器值。
- 包含函式指標的 Vtable。 當 Vtable 出現在 [監看式] 視窗中時,您可以流覽資料表中的函式專案。 如果 Vtable 包含在指向衍生實作的基類中,則會顯示標記法 _vtcast_Class ,表示因為衍生類別而加入的成員。 這些成員會像衍生類別類型一樣展開。
- 擴充函式的傳回值,例如_EFN_GetPoolData。
不同于 [ 區域變數] 視窗,[監看式] 視窗不會受到 暫存器內容的變更所影響。 在 [監看式] 視窗中,您可以只查看並修改目前程式計數器範圍中定義的變數。
如果您開啟新的工作區,則會捨棄 [監看式] 視窗內容,並以新工作區中的內容取代。
工具列和快捷方式功能表
[監看式] 視窗有一個工具列,其中包含兩個按鈕 (Typecast 和 Locations) ,以及包含其他命令的快捷方式功能表。 若要存取功能表,請以滑鼠右鍵按一下視窗的標題列,或按一下視窗右上角附近的圖示:螢幕擷取畫面。
工具列和功能表包含下列按鈕和命令:
(工具列和功能表) Typecast 會開啟和關閉 [類型] 資料行的顯示。
([工具列] 和功能表) [位置 ] 會開啟和關閉 [ 位置] 資料行的顯示。
(功能表只會) 顯示 16 位值,因為 Unicode 會在此視窗中顯示 Unicode 字串。 此命令會開啟和關閉會影響 [ 區域變數] 視窗、[監看式] 視窗和偵錯工具命令輸出的全域設定。 此命令相當於使用 [啟用 Unicode 顯示) ] 命令.enable_unicode (。
(功能表只會) 一律在預設基數中顯示數位 會導致整數顯示在預設基數中,而不是一律以十進位格式顯示。 此命令會開啟和關閉會影響 [區域變數] 視窗、[監看式] 視窗和偵錯工具命令輸出的全域設定。 此命令相當於使用 .force_radix_output (使用 Radix for Integers) 命令。
注意預設基數命令中的永遠顯示數位不會影響長整數。 除非使用 [啟用長整數顯示) ] 命令.enable_long_status (,否則會以十進位格式顯示長整數。 .enable_long_status命令會影響 [區域變數] 視窗、[監看式] 視窗和偵錯工具命令輸出中的顯示。 在 [監看式] 視窗中的功能表中,這個命令並無對等專案。
(功能表只會) 開啟所選值的記憶體視窗 會開啟新的固定記憶體視窗,以顯示從所選運算式位址開始的記憶體。
(功能表只會) 針對選取的記憶體值叫用 dt 會執行 dt (顯示類型) 命令,其中選取的符號為參數。 結果會出現在 [偵錯工具命令] 視窗中。 -n選項會自動用來區分符號與十六進位位址。 不會使用其他選項。 請注意,使用此功能表選取專案所產生的內容與從命令列執行 dt 命令時所產生的內容相同,但格式稍有不同。
([僅功能表]) [工具列 ] 會開啟和關閉工具列。
(功能表只會) Dock 或 Undock 導致視窗進入或離開停駐狀態。
(功能表只會) 移至新停駐區 會關閉 [監看式] 視窗,並在新的停駐區中開啟。
(功能表只會) 一律浮動 ,即使視窗拖曳到停駐位置,仍會維持未停駐狀態。
(功能表只會) 使用框架移動 會導致視窗在移動 WinDbg 框架時移動,即使視窗已取消停駐也一樣。
(功能表 只會) 說明 ],在 Windows 偵錯工具檔中開啟本主題。
(功能表只會) 關閉 此視窗。
另請參閱
如需控制變數的詳細資訊,以及其他記憶體相關命令的描述,請參閱 讀取和寫入記憶體。 如需註冊及其操作的詳細資訊,請參閱 在 WinDbg 中檢視和編輯暫存器 (傳統) 。