? (计算表达式)

问号 (?) 命令计算并显示表达式的值。

注意 问号本身 (?) 命令帮助。 ? 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 数字和运算符 主题。

另请参阅

?? (计算 C++ 表达式)

.formats(显示数字格式)

MASM 数字和运算符

C++ 数字和运算符

MASM 表达式与C++ 表达式

混合表达式示例