Debugging Tools for Windows |
(?) 命令可用于计算和显示一个表达式的值。
注意 单个问号(?)显示命令帮助。? expression 命令计算给定表达式的值。
模式 | 用户模式、内核模式 |
目标 | 活动目标、崩溃转储 |
平台 | 所有 |
?命令的输入和输出依赖于使用MASM表达式语法还是C++表达式语法。关于这积累表达式语法的更多信息,查看表达式求值和数值表达式语法。
如果使用MASM语法,输入和输出都依赖于当前的基数。要改变基数,使用n (Set Number Base)命令。
?命令在当前线程和进程上下文中计算表达式中符号的值。
一些字符串可能包含转义字符,如\n、 \"、 \r、 和\b,它们会被按字面的样子读取,而不会由求值器进行计算。如果字符串中的某个转义字符被求值器计算了,可能会出现求值错误。例如:
0:000> al
Alias Value
------- -------
AliasName c:\dir\name.txt
0:001> ? $spat( "c:\dir\name.txt", "*name*" )
Evaluate expression: 0 = 00000000
0:001> ? $spat( "${AliasName}", "*name*" )
Evaluate expression: 0 = 00000000
0:001> ? $spat( "c:\dir\", "*filename*" )
Syntax error at '( "c:\dir\", "*filename*" )
前两个例子中,虽然字符串匹配了模板,但是求值器还是返回FALSE值。第三个例子中,因为字符串以反斜杠( \ )结束,求值器不能进行比较,所以\" 会被求值器转换。
要让求值器按字面意思莱解释字符串,必须使用@"String" 语法。下面的代码显示了正确的结果:
Evaluate expression: 1 = 00000000`00000001
0:000> ? $spat( @"${AliasName}", "*name*" )
Evaluate expression: 1 = 00000000`00000001
0:001> ? $spat( @"c:\dir\", "*filename*" )
Evaluate expression: 0 = 00000000
例中,$spat MASM操作符会检查第一个字符串是否匹配第二个字符串给出的模板。关于MASM操作符的更多信息,查看MASM数值和操作副主题。
?? (Evaluate C++ Expression), .formats (Show Number Formats)