Поделиться через


? (Вычисление выражения)

Команда вопросительного знака (?) вычисляет и отображает значение выражения.

Сам по себе вопросительный знак (?) отображает справку по команде. Команда ?expression вычисляет заданное выражение.

? Expression

Параметры

Выражение

Указывает выражение для вычисления.

Среда

Элемент Описание
Режимы Пользовательский режим, режим ядра
Цели Динамический аварийный дамп
Платформы Все

Комментарии

Входные и выходные ? данные команды зависят от того, используется ли синтаксис выражений MASM или синтаксис выражений C++. Дополнительные сведения об этих типах синтаксиса выражений см. в разделе Вычисление выражений и синтаксис числовых выражений.

При использовании синтаксиса MASM входные и выходные данные зависят от текущего радикса. Чтобы изменить радикс, используйте команду n (Задать числовую базу).

Команда ? вычисляет символы в выражении в контексте текущего потока и процесса.

Некоторые строки могут содержать escape-элементы, такие как \n, \", \rи \b, которые предназначены для буквального считывания, а не интерпретируемых вычислителем. Если средство оценки интерпретирует escape-экранирование в строке, могут возникнуть ошибки при вычислении. Пример:

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

В предыдущих примерах оператор MASM проверяет первую строку, чтобы определить, $spat соответствует ли она шаблону второй строки (без учета регистра). Дополнительные сведения об операторах MASM см. в разделе Номера и операторы MASM .

См. также раздел

?? (Вычисление выражения C++)

.formats (Показать числовые форматы)

Числа и операторы MASM

Числа и операторы C++

Выражения MASM и выражения C++

Примеры смешанных выражений