在“监视”、“自动”和“局部变量”窗口中,可以使用格式说明符更改值显示的格式。还可以在即时窗口、命令窗口、跟踪点甚至源窗口中使用格式说明符。如果在这些窗口中暂停,表达式结果将显示在数据提示中。数据提示根据格式说明符显示。
设置格式说明符
我们将使用下面的示例代码:
int main() { int my_var1 = 0x0065; int my_var2 = 0x0066; int my_var3 = 0x0067; }
添加my_var1
变量Watch调试时,窗口调试 > Windows > Watch > Watch 1。 接下来,右键单击该变量,并选择十六进制显示。 现在监视窗口将显示值 0x0065。 若要查看此值表示为字符而不是一个整数,首先右键单击,然后取消选中十六进制显示。 然后在变量名后面的Name列中添加字符格式说明符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 Hb |
十六进制整数(没有前导 0x) | 102 | CCCCCCCC |
b | 无符号二进制整数 | 25 | 0b00000000000000000000000000011001 |
bb | 无符号二进制整数(没有前导 0b) | 25 | 00000000000000000000000000011001 |
E | 科学记数法 | 25000000 | 2.500000e+07 |
g | 科学记数或浮点(以较短者为准) | 25000000 | 2.5e+07 |
c | 单个字符 | 0x0065, c | 101 'e' |
s | const char * 字符串 (括在引号中) | <位置 >"你好 world" | "hello world" |
sb | const char * 字符串(无引号) | <位置 >"你好 world" | hello world |
s8 | UTF-8 字符串 | <位置 >"这是 utf-8 咖啡杯 ☕" | "这是 utf-8 咖啡杯 ☕" |
s8b | UTF-8 字符串(无引号) | <位置 >"你好 world" | hello world |
su | Unicode (utf-16 编码) 字符串 (括在引号中) | <location> L"hello world" | L"hello world" u"hello world" |
sub | Unicode(UTF-16 编码)字符串(无引号) | <location> L"hello world" | hello world |
bstr | BSTR 二进制字符串 (括在引号中) | <location> L"hello world" | L"hello world" |
env | 环境块(双空终止字符串) | <位置 > L"=:: =::\" | L"=:: =::\ = C: = C:\windows\system32 ALLUSERSPROFILE =... |
s32 | UTF-32 的字符串 (带有引号) | <位置 > U"你好 world" | u"hello world" |
s32b | UTF-32 string (no quotation marks) | <位置 > U"你好 world" | hello world |
en | enum | Saturday(6) | 星期六 |
hv | 指针类型 - 指示被检查的指针值是数组的堆分配的结果,如 new int[3] 。 |
<location>{<first member>} | <位置 > {<第一个成员 >,<第二个成员 >,...} |
na | 取消指向对象的指针的内存地址。 | <location>, {member=value...} | {member=value...} |
nd | 仅显示基类信息,忽略派生的类 | (Shape*) square 包括基类和派生类信息 |
仅显示基类信息 |
hr | HRESULT 或 Win32 错误代码。 Hresult 为不再需要此说明符,因为调试器自动将它们进行解码。 | S_OK | S_OK |
wc | 窗口类标志 | 0x0010 | WC_DEFAULTCHAR |
wm | Windows 消息数字 | 16 | WM_CLOSE |
nr | 取消“原始视图”项 | ||
nvo | 显示数值的"原始视图"项 | ||
! | 原始格式,忽略任何数据类型视图自定义项 | <customized representation> | 4 |
指针作为数组的大小说明符
如果有一个指针指向要看做数组形式的对象,则可以使用一个整数或表达式来指定数组中元素的数量。
说明符 | 格式 | 原始监视值 | 显示的值 |
---|---|---|---|
n | 十进制或 十六进制 整数 | pBuffer,[32] pBuffer,“[0x20]” |
将 pBuffer 显示为一个 32 元素的数组。 |
[exp] | 计算结果为一个整数的有效的 C++ 表达式。 | pBuffer,[bufferSize] | 将 pBuffer 显示为 bufferSize 元素的一个数组。 |
expand(n) | 计算结果为一个整数的有效的 C++ 表达式。 | pBuffer, expand(2) | 显示 pBuffer 的第三个元素 |
用C++/CLI进行互操作调试的格式说明符
粗体 的说明符仅支持本地调试和 C++/CLI 代码。
说明符 | 格式 | 原始监视值 | 显示的值 |
---|---|---|---|
d i |
有符号的十进制整数 | 0xF000F065 | -268373915 |
u | 无符号的十进制整数 | 0x0065 | 101 |
o | 无符号的八进制整数 | 0xF065 | 0170145 |
x X |
十六进制整数 | 61541 | 0x0000f065 |
l h |
用于 d、i、u、o、x、X 的 long 或 short 前缀 | 00406042 | 0x0c22 |
f | 带符号的浮点 | (3./2.), f | 1.500000 |
e | 有符号的科学计数法 | (3.0/2.0) | 1.500000e+000 |
g | 带符号浮点数或带符号的科学记数法, 较短者为准 |
(3.0/2.0) | 1.5 |
c | 单个字符 | <location> | 101 'e' |
s | const char * (用引号引起来) | <location> | "hello world" |
su | const wchar_t* const char16_t* (用引号引起来) |
<location> | L"hello world" |
sub | const wchar_t* const char16_t* |
<location> | hello world |
s8 | const char * (用引号引起来) | <location> | "hello world" |
hr | HRESULT 或 Win32 错误代码。 Hresult 为不再需要此说明符,因为调试器自动将它们进行解码。 |
S_OK | S_OK |
wc | 窗口类标志 | 0x00000040, | WC_DEFAULTCHAR |
wm | Windows 消息数字 | 0x0010 | WM_CLOSE |
! | 原始格式,忽略任何数据类型视图自定义项 | <customized representation> | 4 |
用C++/CLI实现互操作调试中内存位置的格式说明符
下表描述了用于内存位置的格式化符号。 可将内存位置说明符与任何值或任何计算结果为某位置的表达式一起使用。
符号 | 格式 | 原始监视值 | 显示的值 |
---|---|---|---|
ma | 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 |
mu | 双字节字符 (Unicode) | 0x0012ffac | 0x0012ffac 8478 77f4 ffff ffff 0000 0000 0000 0000 |
用C++/CLI为互操作调试中指针数组的大小说明符
如果有一个指针指向要看做数组形式的对象,则可以使用一个整数来指定数组中元素的数量。
说明符 | 格式 | 表达式 | 显示的值 |
---|---|---|---|
n | 十进制整数 | pBuffer[32] | 将 pBuffer 显示为 32 个元素的数组。 |