? (式の評価)
疑問符 (?
) コマンドは、式の値を評価し、表示します。
疑問符単独では (?)、コマンドのヘルプを表示します。 ?
expressionコマンドは、指定された式を評価します。
? Expression
パラメーター
Expression
評価する式を指定します。
Environment
項目 | 説明 |
---|---|
モード | ユーザー モード、カーネル モード |
対象 | ライブ、クラッシュ ダンプ |
プラットフォーム | すべて |
解説
?
コマンドの入力と出力は、MASM 式の構文または C++ 式の構文を使用しているかどうかによって異なります。 これらの種類の式の構文の詳細については、「式の評価」と「数式の構文」を参照してください。
MASM 構文を使用している場合、入力と出力は、現在の基数によって異なります。 基数を変更するには、n (基数の設定) コマンドを使用します。
?
コマンドは、現在のスレッドとプロセスのコンテキストで式内の記号を評価します。
一部の文字列ではエスケープを含めることができ、たとえば、\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*" )
最初の 2 つの例では、文字列がパターンに一致する場合でも、エバリュエーターは FALSE の値を返します。 3 番目の例では、文字列が円記号 (\
) で終わるため、\"
がエバリュエーターによって変換されるため、エバリュエーターは比較を行うことはできません。
エバリュエーターが文字列を文字どおりに解釈するためには、@"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 演算子は最初の文字列をチェックして、2 番目の文字列のパターン (大文字と小文字を区別しない) と一致するかどうかを判断します。 MASM 演算子の詳細については、 「MASM の数値と演算子」のトピックを参照してください。