您可以使用格式指定元來變更值在 [監看]、[ 自動] 和 [區域變數 ] 視窗中顯示的格式。
您也可以在 [立即] 視窗、[ 命令] 視窗、 追蹤點,甚至來源視窗中使用格式指定元。 如果您在這些視窗中的運算式上暫停,結果會出現在 資料提示中。 DataTip 顯示會反映格式指定元。
備註
當 Visual Studio 原生偵錯工具變更為新的偵錯引擎時,會新增一些新的格式指定元,並移除一些舊的格式指定元。 當您使用 C++/CLI 進行互通性 (混合原生和受控) 偵錯時,仍會使用較舊的偵錯工具。
設定格式指定元
我們將使用以下範例程式碼:
int main() {
int my_var1 = 0x0065;
int my_var2 = 0x0066;
int my_var3 = 0x0067;
}
偵錯時將 my_var1 變數新增至 監看 視窗,偵錯>Windows>監看>監看 1。 接下來,在變數上按一下滑鼠右鍵,然後選取十六 進位顯示。 現在, 「監看」 視窗會顯示值0x0065。 若要查看此值以字元而非整數表示,請先按一下滑鼠右鍵,然後取消選取十六進位顯示。 然後在變數名稱後面的「名稱」欄中新增字元格式指定元 c。
值欄現在顯示101 'e'。
您可以在 監看 視窗中的值後附加逗號(,),以查看並選擇可用的格式指定元清單。
格式規範
下表說明您可以在 Visual Studio 中使用的格式指定元。 只有新的偵錯工具支援粗體指定元,而不支援使用 C++/CLI 的互通偵錯。
| 指定符 | 格式 | 原廠手錶價值 | 顯示值 |
|---|---|---|---|
| d | 十進位整數 | 0x00000066 | 102 |
| o | 無符號八進制整數 | 0x00000066 | 000000000146 |
| x h |
十六進位整數 | 102 | 0xcccccccc |
| X H |
十六進位整數 | 102 | 0xCCCCCCCC |
| XB hb |
十六進位整數(不含前導 0x) | 102 | cccccccc |
| Xb 血紅蛋白 |
十六進位整數(不含前導 0x) | 102 | CCCCCCCC |
| b | 無符號二進位整數 | 25 | 0b00000000000000000000000000011001 |
| bb | 無符號二進位整數(無前導 0b) | 25 | 00000000000000000000000000011001 |
| e | 科學記號標記法 | 25000000 | 2.500000e+07 |
| g | 科學計數法或浮點數的較短格式 | 25000000 | 2.5e+07 |
| c | 單一字元 | 0x0065 | 101 'e' |
| s | const char* 字串(帶引號) | <地點> “你好世界” | “你好世界” |
| SB | const char* 字串(無引號) | <地點> “你好世界” | 你好世界 |
| 第8條 | UTF-8 字串 | <位置> “這是一個 UTF-8 咖啡杯 ☕” | 「這是一個 UTF-8 咖啡杯☕」 |
| s8b | UTF-8 字串 (無引號) | <地點> “你好世界” | 你好世界 |
| 蘇 | Unicode (UTF-16 編碼) 字串 (以引號括起) | <地點> L“hello world” | L“你好世界” u“你好世界” |
| 分支 | Unicode (UTF-16 編碼) 字串 (無引號) | <地點> L“hello world” | 你好世界 |
| bstr | BSTR 二進位字串 (以引號括起) | <地點> L“hello world” | L“你好世界” |
| env | 環境區塊 (雙空值結尾字串) | <位置> L"=::=::\\" | L"=::=::\\\0=C:=C:\\windows\\system32\0ALLUSERSPROFILE=... |
| 第32條 | UTF-32 字串 (含引號) | <位置> U“hello world” | U“hello world” |
| s32b | UTF-32 字串 (無引號) | <位置> U“hello world” | 你好世界 |
| en | 列舉 | 禮拜六(6) | 星期六 |
| 高壓 | 指標類型 - 表示正在檢查的指標值是陣列資料堆配置的結果,例如 new int[3]。 |
<地點>{<第一位成員>} | <location>{<第一位成員>, <第二位成員>,...} |
| 不 | 隱藏物件指標的記憶體位址。 | <位置>,{member=value...} | {member=值...} |
| nd | 只顯示基類資訊,忽略衍生類別 |
(Shape*) square 包括基類和衍生類信息 |
僅顯示基類資訊 |
| hr | HRESULT 或 Win32 錯誤碼。 HRESULT 不再需要此指定元,因為偵錯工具會自動解碼它們。 | S_OK | S_OK |
| 衛生間 | 視窗類別旗標 | 0x0010 | WC_DEFAULTCHAR |
| WM | Windows 訊息號碼 | 16 | WM_CLOSE |
| NR | 隱藏「原始檢視」項目 | ||
| nvo | 僅針對數值顯示「原始檢視」選項 | ||
| ! | 原始格式,忽略任何資料類型檢視自訂 | <客製化表示> | 4 |
| 控制代碼 | 顯示Win32控制代碼的相關資訊 | 0x000000000000009c | 顯示有關句柄的有用信息,例如執行緒 ID 等。 |
備註
當 hv 格式指定元存在時,偵錯工具會嘗試判斷緩衝區的長度,並顯示該元素數目。 因為偵錯工具不一定能找到陣列的確切緩衝區大小,所以您應該盡可能使用大小指定元 (pBuffer,[bufferSize]) 。 當緩衝區大小不可用時, hv 格式指定元很有用。
作為陣列的指標大小指定符
如果您有指向要以陣列形式檢視的物件的指標,則可以使用整數或運算式來指定陣列元素的數目。
| 指定符 | 格式 | 原廠手錶價值 | 顯示值 |
|---|---|---|---|
| n | 十進位或 十六進位 整數 | pBuffer,[32] pBuffer,[0x20] |
顯示 pBuffer 為 32 個元素陣列。 |
| [經驗值] | 評估為整數的有效 C++ 運算式。 | pBuffer,[緩衝區大小] | 將 pBuffer 顯示為元素陣 bufferSize 列。 |
| 展開(n) | 計算結果為整數的有效 C++ 運算式 | pBuffer,展開(2) | 顯示pBuffer的第三個元素 |
使用 C++/CLI 進行互操作偵錯的格式指定元
| 指定符 | 格式 | 原廠手錶價值 | 顯示值 |
|---|---|---|---|
| o | 無符號八進制整數 | 0xF065 | 0170145 |
| x X |
十六進位整數 | 61541 | 0x0000f065 |
| c | 單一字元 | <位置> | 101 'e' |
| s | const char* (帶引號) | <位置> | “你好世界” |
| 蘇 | 常數 wchar_t* const char16_t* (帶有引號) |
<位置> | L“你好世界” |
| 分支 | const wchar_t* 常量char16_t* |
<位置> | 你好世界 |
| 第8條 | const char* (帶引號) | <位置> | “你好世界” |
| hr | HRESULT 或 Win32 錯誤碼。 HRESULT 不再需要此指定元,因為偵錯工具會自動解碼它們。 |
S_OK | S_OK |
| 衛生間 | 視窗類別旗標 | 0x00000040, | WC_DEFAULTCHAR |
| WM | Windows 訊息號碼 | 0x0010 | WM_CLOSE |
| ! | 原始格式,忽略任何資料類型檢視自訂 | <客製化表示> | 4 |
原生和 C++/CLI 程式碼的 d、e、f、g、h、i、l、m、ma、mb、md、mq、mu、mw 和 u 指定元需要舊版偵錯工具,而 Visual Studio 2022 或更新版本不支援舊版偵錯工具。
只有在偵錯原生和 C++/CLI 程式碼時,才支援粗體中的指定元。 這些指定元需要舊版偵錯工具,並使用 受控相容模式來指定。
| 指定符 | 格式 | 原廠手錶價值 | 顯示值 |
|---|---|---|---|
|
d 我 |
有符號十進制整數 | 0xF000F065 | -268373915 |
| u | 無符號十進制整數 | 0x0065 | 101 |
| o | 無符號八進制整數 | 0xF065 | 0170145 |
| x X |
十六進位整數 | 61541 | 0x0000f065 |
|
l h |
長或短前綴:d、i、u、o、x、X | 00406042 | 0x0c22 |
| f | 有符號浮點 | (3./2.),f | 1.500000 |
| e | 有符號科學記數法 | (3.0/2.0) | 1.500000e+000 |
| g | 有符號浮點或有符號科學記數法, 以較短者為準 |
(3.0/2.0) | 1.5 |
| c | 單一字元 | <位置> | 101 'e' |
| s | const char* (帶引號) | <位置> | “你好世界” |
| 蘇 | const wchar_t* const char16_t* (帶有引號) |
<位置> | L“你好世界” |
| 分支 | const wchar_t* 常量char16_t* |
<位置> | 你好世界 |
| 第8條 | const char* (帶引號) | <位置> | “你好世界” |
| hr | HRESULT 或 Win32 錯誤碼。 HRESULT 不再需要此指定元,因為偵錯工具會自動解碼它們。 |
S_OK | S_OK |
| 衛生間 | 視窗類別旗標 | 0x00000040, | WC_DEFAULTCHAR |
| WM | Windows 訊息號碼 | 0x0010 | WM_CLOSE |
| ! | 原始格式,忽略任何資料類型檢視自訂 | <客製化表示> | 4 |
使用 C++/CLI 進行互操作偵錯中記憶體位置的格式指定元
下表說明用於記憶體位置的格式化符號。 您可以將記憶體位置指定元與評估為位置的任何值或運算式搭配使用。
只有在偵錯原生和 C++/CLI 程式碼時,才支援粗體中的指定元。 這需要使用 受控相容模式指定的舊版偵錯工具。
| Symbol | 格式 | 原廠手錶價值 | 顯示值 |
|---|---|---|---|
| 馬 | 64 個 ASCII 字元 | 0x0012ffac | 0x0012ffac .4...0..."。0W&.......1W&.0.:W..1...."..1.JO&.1.2.."..1...0y....1 |
| m | 16 位元組十六進位,後面接著 16 個 ASCII 字元 | 0x0012ffac | 0x0012ffac B3 34 CB 00 84 30 94 80 FF 22 8A 30 57 26 00 00 .4...0...".0W&.. |
| MB | 16 位元組十六進位,後面接著 16 個 ASCII 字元 | 0x0012ffac | 0x0012ffac B3 34 CB 00 84 30 94 80 FF 22 8A 30 57 26 00 00 .4...0...".0W&.. |
| MW | 8個字 | 0x0012ffac | 0x0012ffac 34B3 00CB 3084 8094 22FF 308A 2657 0000 |
| md | 4 雙字組 | 0x0012ffac | 0x0012ffac 00CB34B3 80943084 308A22FF 00002657 |
| MQ | 2 個四字組 | 0x0012ffac | 0x0012ffac 7ffdf00000000000 5f441a790012fdd4 |
| µ | 2 位元組字元 (Unicode) | 0x0012ffac | 0x0012ffac 8478 77f4 ffff ffff 0000 0000 0000 0000 |
指標作為陣列的大小指定符,用於 C++/CLI 的互操作偵錯中
如果您有指向要以陣列形式檢視的物件的指標,則可以使用整數來指定陣列元素的數目。
| 指示符 | 格式 | Expression | 顯示值 |
|---|---|---|---|
| n | 十進位整數 | pBuffer[32] | 顯示 pBuffer 為 32 個元素的陣列。 |