Debugging Tools for Windows

? (Evaluate Expression)

(?) 命令可用于计算和显示一个表达式的值。

注意 单个问号(?)显示命令帮助。? expression 命令计算给定表达式的值。

语法

? Expression

参数

Expression
指定要计算的表达式。

环境

模式 用户模式、内核模式
目标 活动目标、崩溃转储
平台 所有

注释

?命令的输入和输出依赖于使用MASM表达式语法还是C++表达式语法。关于这积累表达式语法的更多信息,查看表达式求值数值表达式语法

如果使用MASM语法,输入和输出都依赖于当前的基数。要改变基数,使用n (Set Number Base)命令。

?命令在当前线程和进程上下文中计算表达式中符号的值。

一些字符串可能包含转义字符,如\n\"\r、 和\b,它们会被按字面的样子读取,而不会由求值器进行计算。如果字符串中的某个转义字符被求值器计算了,可能会出现求值错误。例如:

0:000> as AliasName c:\dir\name.txt
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" 语法。下面的代码显示了正确的结果:

0:000> ? $spat( @"c:\dir\name.txt", "*name*" )
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)

Build machine: CAPEBUILD