Debugging Tools for Windows

表达式求值

调试器能够识别两种表达式类型:MASM表达式C++表达式。

如果没有特别指出,本帮助文档示例中使用的是Microsoft宏汇编(MASM)表达式。在MSAM表达式中,所有符号都被当作地址对待。

C++表达式和真实的C++代码中一样,符号被当作适当的数据类型。

每种语法何时被使用

可以使用下面的方法之一来选择默认的表达式类型:

如果没用使用上面任何一种方法,调试器使用MASM表达式。

如果想不改变默认的表达式类型来计算一个表达式,可以使用? (Evaluate Expression)命令。

除了下面几种例外情况,所有命令和调试器信息窗口都通过默认表达式来解释他们的参数:

双at符号(@@)使得可以在单个命令中为不同参数使用不同的表达式类型。也可以在长表达式中使用两种不同形式来计算子表达式。双at号可以嵌套。每层@@号都将表达式类型改为另一种。

警告 C++表达式语法用于处理结构和变量很有用,但是用作调试器命令的参数解析器并不适当。使用通常情况下的调试器命令或调试器扩展时,应该将MASM表达式设置为默认类型。如果有某个参数必须使用C++表达式语法时,使用@@号。

关于两种不同类型表达式的更多信息,查看数值表达式语法

表达式中的数字

MASM表达式中的数字根据当前的进制数来进行解释。n (Set Number Base)命令可以用来将进制设置为16、10或8。所有未加前缀的数字都会按这个进制来解释。默认的进制数可以用0x(16进制)、0n(10进制)、0t(8进制)或0y(2进制)前缀覆盖掉。

在C++表达式中的数字如果没有专门指定,则被认为是10进制数。可以在数字前加上0x 来指定16进制整数,加上0来指定8进制整数。(但是,在调试器的输出中,有时候0n前缀用于8进制整数。)

如果一次想以不同进制数来显示数字,可以使用.formats (Show Number Formats)命令。

表达式中的符号

两种表达式解释符号的方式不同:

如果符号不明确,可以在它前面加上模块名和感叹号(!)。如果符号名可能被当作16进制数字,可以加上模块名和感叹号,或者只加上感叹号。如果要指定局部变量的符号,可以省略模块名,并在符号前加上美元符号和感叹号( $! )。关于符号解析的更多信息,查看符号语法和符号匹配

表达式中的运算符

不同的表达式类型使用不同的运算符集合。

关于MASM表达式中的运算符和他们的运算优先级的更多信息,查看MASM 数字和运算符

关于C++表达式的运算符和优先级规则,查看C++ 数字和运算符

MASM运算符都是基于byte的,C++运算符由C++类型决定(包括指针的转换)。

关于不同语法的示例,查看表达式示例

Build machine: CAPEBUILD