Visual Studio 调试器中C++的格式说明符

可以使用格式说明符更改在 “监视”、“自动”和 “局部变量”窗口中显示的值的格式。

还可以在 “即时 ”窗口中、 命令 窗口、 跟踪点甚至源窗口中使用格式说明符。 如果在这些窗口中的某个表达式上暂停,结果会显示在 DataTip 中。 DataTip 显示会根据格式说明符进行调整。

注释

当 Visual Studio 本机调试器更改为新的调试引擎时,会添加一些新的格式说明符,并删除了一些旧格式说明符。 使用 C++/CLI 执行互作(混合本机和托管)调试时,仍会使用较旧的调试器。

设置格式说明符

我们将使用以下示例代码:

int main() {
    int my_var1 = 0x0065;
    int my_var2 = 0x0066;
    int my_var3 = 0x0067;
}

在调试时将 my_var1 变量添加到 “监视 ”窗口, 调试>Windows>Watch>1。 接下来,右键单击变量并选择 “十六进制显示”。 现在, “监视 ”窗口会显示值0x0065。 若要查看此值表示为字符而不是整数,请首先右键单击并取消选择 十六进制显示。 然后,在变量名称之后的 Name 列中添加字符格式说明符 c“值”列现在显示 101 个“e”。

Visual Studio 监视窗口的屏幕截图中,选择了一行,展示 my_var1 的值为 101 'e',类型为 int。

可以通过在 “监视” 窗口中的值后附加逗号 (,)来查看和选择可用的格式说明符列表。

WatchFormatSpecDropdown

格式说明符

下表描述了可在 Visual Studio 中使用的格式说明符。 粗体说明符仅支持新调试器,而不支持使用 C++/CLI 进行互作调试。

说明符 Format 原始监视值 显示的值
d 十进制整数 0x00000066 102
o 无符号八进制整数 0x00000066 000000000146
x

h
十六进制整数 102 0xcccccccc
X

H
十六进制整数 102 0xCCCCCCCC
xb

hb
十六进制整数 (不带前导 0x) 102 cccccc
Xb

Hb
十六进制整数 (不带前导 0x) 102 CCCCCCCC
b 无符号二进制整数 二十五 0b00000000000000000000000000011001
bb 无符号二进制整数(不含前导 0b) 二十五 00000000000000000000000000011001
e 科学记数法 25000000 2.500000e+07
更短的科学点或浮点 25000000 2.5e+07
c 单个字符 0x0065 101 “e”
s const char* 字符串(带引号) <位置> “你好,世界” “hello world”
某人 const char* 字符串 (无引号) <位置> “你好,世界” 世界您好
s8 UTF-8 字符串 <位置> “这是 UTF-8 咖啡杯 - ̃•” “这是一个 UTF-8 咖啡杯☕”
s8b UTF-8 字符串(无引号) <位置> “你好,世界” 世界您好
su Unicode (UTF-16 编码) 字符串(带引号) <location> L“你好,世界” L“hello world”

u“hello world”
子项 Unicode (UTF-16 编码) 字符串 (无引号) <location> L“你好,世界” 世界您好
bstr BSTR 二进制字符串(带引号) <location> L“你好,世界” L“hello world”
env 环境块(双空字符终止字符串) <location> L"=::=::\\" L"=::=::\\\0=C:=C:\\windows\\system32\0ALLUSERSPROFILE=...
s32 UTF-32 字符串(带引号) <location> U“hello world” U“hello world”
s32b UTF-32 字符串(无引号) <location> U“hello world” 世界您好
en 枚举 星期六(6) Saturday
高压 指针类型 - 指示所检查的指针值是数组的堆分配的结果,例如 new int[3] <位置>{<first member>} <location>{<第一个成员>,<第二个成员>,...}
na 隐藏指向对象的指针的内存地址。 <location>, {member=value...} {member=value...}
nd 仅显示基类信息,忽略派生类 (Shape*) square 包括基类和派生类信息 仅显示基类信息
小时 HRESULT 或 Win32 错误代码。 HRESULT 不再需要此说明符,因为调试器会自动对其进行解码。 S_OK S_OK
廁所 窗口类标志 0x0010 WC_DEFAULTCHAR
wm Windows 消息编号 16 WM_CLOSE
星期日 取消“原始视图”项
nvo 仅对数值显示“原始视图”项
! 原始格式,忽略任何数据类型视图自定义 <自定义表示形式> 4
句柄 显示 win32 句柄的相关信息 0x000000000000009c 显示有关句柄的有用信息,例如线程 ID 等。

注释

存在 hv 格式说明符时,调试器将尝试确定缓冲区的长度并显示该数量的元素。 由于调试器并不总是能够找到数组的确切缓冲区大小,因此应尽可能使用大小说明符 (pBuffer,[bufferSize]) 。 当缓冲区大小不可用时, hv 格式说明符非常有用。

作为数组的指针大小说明符

如果有指向要作为数组查看的对象的指针,则可以使用整数或表达式来指定数组元素的数目。

说明符 Format 原始监视值 显示的值
n 十进制或 十六进制 整数 pBuffer,[32]

pBuffer,[0x20]
显示为 pBuffer 32 个元素数组。
[exp] 计算结果为整数的有效C++表达式。 pBuffer,[bufferSize] 将 pBuffer 显示为元素数组 bufferSize
expand(n) 计算结果为整数的有效C++表达式 pBuffer, expand(2) 显示pBuffer的第三个元素

使用 C++/CLI 进行互操作调试的格式说明符

说明符 Format 原始监视值 显示的值
o 无符号八进制整数 0xF065 0170145
x

X
十六进制整数 61541 0x0000f065
c 单个字符 <位置> 101 “e”
s const char* (带引号) <位置> “hello world”
su const wchar_t*

const char16_t* (带引号)
<位置> L“hello world”
子项 const wchar_t*

const char16_t*
<位置> 世界您好
s8 const char* (带引号) <位置> “hello world”
小时 HRESULT 或 Win32 错误代码。
HRESULT 不再需要此说明符,因为调试器会自动对其进行解码。
S_OK S_OK
廁所 窗口类标志 0x00000040, WC_DEFAULTCHAR
wm Windows 消息编号 0x0010 WM_CLOSE
! 原始格式,忽略任何数据类型视图自定义 <自定义表示形式> 4

d、e、f、g、h、i、l、m、ma、mb、md、mq、mu、mw、u 说明符对于本机和 C++/CLI 代码需使用已弃用的调试器,而 Visual Studio 2022 或更高版本不支持该调试器。

使用 C++/CLI 在互操作调试中将指针的大小说明符作为数组使用

如果有指向要作为数组查看的对象的指针,则可以使用整数来指定数组元素的数目。

说明符 Format Expression 显示的值
n 十进制整数 pBuffer[32] pBuffer 显示为一个32元组的数组。