C++ 中的格式说明符
在**“监视”窗口或“快速监视”**对话框中调试本机代码时,会使用格式说明符更改值的显示格式。
(大多数格式说明符仅适用于本机代码,但是 Visual C# 包含有限的一组格式说明符。 请参阅 C# 中的格式说明符。)
您还可以在即时窗口、命令窗口甚至是源窗口中使用格式说明符。 如果将鼠标悬停在这些窗口中的表达式上,结果将在数据提示中显示。 数据提示将在数据提示的显示内容中反映格式说明符。
备注
转换到新调试引擎的 Visual Studio 本机调试器。此更改包括添加了几个新的格式说明符和删除了某些旧的格式说明符。转换没有完成,当您使用 C++/CLI 进行互操作(混合本机和托管)调试时,以及当您使用 C++ 进行编辑调试并继续时,仍使用较早的调试器。本主题的各部分介绍每种调试引擎的格式说明符。
-
Visual Studio 2012 format specifiers描述新的调试引擎中的格式说明符。
-
Format specifiers for interop debugging and C++ edit and continue描述较旧的调试引擎中的格式说明符。
内容
Example
Visual Studio 2012 format specifiers
- Size specifiers for pointers as arrays in Visual Studio 2012
Format specifiers for interop debugging and C++ edit and continue
Format specifiers memory locations in interop debugging and C++ edit and continue
Size specifier for pointers as arrays in interop debugging and C++ edit and continue
示例
假设 nVar 是整数变量,并且“监视”窗口显示该变量包含值 0x0065。 若要看到表示为字符而不是整数的值,请在“名称”列的变量名之后添加字符格式说明符 c:
“值”列现在不显示整数值 0x0065,而显示字符值 101 'e'。
如果要将格式说明符应用于数组元素或对象成员,则必须将其直接应用于每个元素或成员。 不能将其应用于整体数组或对象。 例如,假设有数组 nArray,并且想看字符格式的前四个元素。 应在**“监视”**窗口输入下列表达式:
nArray[0],c
nArray[1],c
nArray[2],c
nArray[3],c
Visual Studio 2012 格式说明符
当没有使用 C++/CLI 进行调试互操作(本机和托管)或使用 C++ 编辑并继续时,可以在 Visual Studio 2012 中使用下表显示的格式说明符。
加粗的说明符不支持使用 C++/CLI 的互操作调试或使用 C++ 编辑并继续的调试。
说明符 |
格式 |
Expression |
显示的值 |
---|---|---|---|
d |
十进制整数 |
0xF000F065, d |
-268373915 |
o |
无符号的八进制整数 |
0xF065, o |
0170145 |
x h |
十六进制整数 |
61546, x 61541, h |
0x0000f06a |
X H |
十六进制整数 |
61541, X 61546, H |
0x0000F06A |
c |
单个字符 |
0x0065, c |
101 'e' |
s |
ASCII 字符串 |
0x0012fde8, s |
"Hello world" |
sb |
ASCII 字符串 |
0x0012fde8, sb |
Hello world |
su |
Unicode 字符串 |
0x0012fde8, su |
L"Hello world" |
sub |
Unicode 字符串 |
0x0012fde8, sub |
Hello world |
s8 |
UTF-8 字符串 |
0x0012fde8, s8 |
"Hello world" |
s8b |
UTF-8 字符串 |
0x0012fde8, s8b |
Hello world |
bstr |
BSTR 字符串 |
0x0032fe8, bstr |
Hi there |
en |
在求值结果为 C++ 枚举类型的表达式上使用。 仅显示枚举常量的名称,省略数值。 |
enumValue,en |
EnumValue |
, na |
&myGlobal, n winmain, na |
指针的地址不会显示。 |
|
nd |
pb,nd |
仅显示 pb 的基类信息,忽略派生的类 |
|
hr |
HRESULT 或 Win32 错误代码。 (调试器自动将 HRESULT 解码,因此这些情况下不需要该说明符。) |
0x00000000L, hr |
S_OK |
wc |
窗口类标志。 |
0x00000040, wc |
WC_DEFAULTCHAR |
wm |
Windows 消息数字 |
0x0010, wm |
WM_CLOSE |
! |
原始格式,忽略任何数据类型视图自定义项 |
i ! |
4 |
指针的大小说明符作为 Visual Studio 2012 中的数组
如果有一个指针指向要以数组形式查看的对象,则可以使用一个整数或表达式来指定数组中元素的数量:
说明符 |
格式 |
Expression |
显示的值 |
---|---|---|---|
n |
十进制或十六进制整数 |
pBuffer,[32] pBuffer,[0x20] |
将 pBuffer 显示为一个 32 个元素的数组。 |
[exp] |
计算结果为一个整数的有效的 C++ 表达式。 |
pBuffer,[bufferSize] |
计算 bufferSize,并将 pBuffer 显示为计算数目的元素的数组。 |
expand(n) |
pBuffer, expand(1,2) |
显示 pBuffer 第二个子级的第三个子级 |
使用 C++/CLI 或 C++ 编辑并继续的互操作调试的格式说明符
加粗的说明符仅支持调试本机和 C++/CLI 代码以及使用 C++ 编辑并继续进行调试。
说明符 |
格式 |
Expression |
显示的值 |
---|---|---|---|
d,i |
有符号的十进制整数 |
0xF000F065, d |
-268373915 |
u |
无符号的十进制整数 |
0x0065, u |
101 |
o |
无符号的八进制整数 |
0xF065, o |
0170145 |
x,X |
十六进制整数 |
61541, x |
0x0000f065 |
l,h |
用于 d、i、u、o、x、X 的 long 或 short 前缀 |
00406042,hx |
0x0c22 |
f |
带符号的浮点 |
(3./2.), f |
1.500000 |
e |
有符号的科学计数法 |
(3./2.), e |
1.500000e+000 |
g |
有符号的浮点数字或有符号的科学计数法,显示其中较短的数 |
(3./2.), g |
1.5 |
c |
单个字符 |
0x0065, c |
101 'e' |
s |
String |
0x0012fde8, s |
"Hello world" |
su |
Unicode 字符串 |
0x0012fde8, su |
L"Hello world" |
sub |
Unicode 字符串 |
0x0012fde8, sub |
Hello world |
s8 |
UTF-8 字符串 |
0x0012fde8, s8 |
"Hello world" |
hr |
HRESULT 或 Win32 错误代码。 (调试器自动将 HRESULT 解码,因此这些情况下不需要该说明符。) |
0x00000000L, hr |
S_OK |
wc |
窗口类标志。 |
0x00000040, wc |
WC_DEFAULTCHAR |
wm |
Windows 消息数字 |
0x0010, wm |
WM_CLOSE |
! |
原始格式,忽略任何数据类型视图自定义项 |
i ! |
4 |
使用 C++/CLI 或 C++ 编辑并继续的互操作调试中的格式说明符内存位置
下表包含用于内存位置的格式化符号。 可以使用带有计算为位置的任何值或表达式的内存位置说明符。
符号 |
格式 |
Expression |
显示的值 |
---|---|---|---|
ma |
64 个 ASCII 字符 |
ptr, ma |
0x0012ffac .4...0...".0W&.......1W&.0.:W..1...."..1.JO&.1.2.."..1...0y....1 |
m |
以十六进制表示的 16 个字节,后跟 16 个 ASCII 字符 |
ptr, m |
0x0012ffac B3 34 CB 00 84 30 94 80 FF 22 8A 30 57 26 00 00 .4...0...".0W&.. |
mb |
以十六进制表示的 16 个字节,后跟 16 个 ASCII 字符 |
ptr, mb |
0x0012ffac B3 34 CB 00 84 30 94 80 FF 22 8A 30 57 26 00 00 .4...0...".0W&.. |
mw |
8 个字 |
ptr, mw |
0x0012ffac 34B3 00CB 3084 8094 22FF 308A 2657 0000 |
md |
4 个双字 |
ptr, md |
0x0012ffac 00CB34B3 80943084 308A22FF 00002657 |
mq |
2 个双字 |
ptr, mq |
0x0012ffac 7ffdf00000000000 5f441a790012fdd4 |
mu |
双字节字符 (Unicode) |
ptr, mu |
0x0012fc60 8478 77f4 ffff ffff 0000 0000 0000 0000 |
指针的大小说明符作为在使用 C++/CLI 或 C++ 编辑并继续的互操作调试中的数组
如果有一个指针指向要以数组形式查看的对象,则可以使用一个整数来指定数组中元素的数量:
说明符 |
格式 |
Expression |
显示的值 |
---|---|---|---|
n |
十进制整数 |
pBuffer[32] |
将 pBuffer 显示为一个 32 个元素的数组。 |