エンジンの操作
コマンドと式
デバッガー エンジン API には、WinDbg のデバッガー コマンド ウィンドウに入力されたもののように、コマンドを実行して式を評価するメソッドが 用意されています。 デバッガー コマンドを実行するには、実行 を使用 します。 または、ファイル内のすべてのコマンドを実行するには、ExecuteCommandFile を使用します。
Evaluate メソッドは、C++ または MASM 構文を使用して式を評価します。 Evaluate メソッドなど、デバッガー エンジンが式を評価するために使用する構文は、GetExpressionSyntax によって指定され、SetExpressionSyntaxByName と SetExpressionSyntax を使用して変更できます。 デバッガーによって認識される異なる構文の数は GetNumberExpressionSyntaxes によって返され、その名前は GetExpressionSyntaxNames によって返されます。
Evaluate によって 返される値の型は、評価 された文字列で使用されるシンボルと定数によって決まります。 値は DEBUG_VALUE 構造体に含まれており、CoerceValue と CoerceValues を使用してさまざまな型にキャストできます。
Aliases
エイリアス は、デバッガーコマンドや式で使用すると、自動的に他の文字列に置き換えられる文字列です。 エイリアスの概要については、「エイリアスの使用」を参照してください。 デバッガー エンジンには、エイリアスのいくつかのクラスがあります。
固定名のエイリアス は番号でインデックス付けされ、$u 0、$u 1、...、$u 9 という名前になります。 これらのエイリアスの値は、SetTextMacro メソッドを使用して設定でき、GetTextMacro メソッドを使用して取得できます。
自動エイリアス と ユーザー名エイリアス には任意の名前を付けることができます。 自動エイリアスはデバッガー エンジンによって定義され、ユーザー名のエイリアスはデバッガー コマンドまたはデバッガー エンジン API を使用してユーザーによって定義されます。 ユーザー名のエイリアスを定義または削除するには、SetTextReplacement メソッドを使用します。 GetTextReplacement メソッドは、自動エイリアスまたはユーザー名のエイリアスの名前と値を返します。 RemoveTextReplacements メソッドを使用して 、すべてのユーザー名のエイリアスを 削除できます。 GetNumberTextReplacements メソッドは、ユーザー名と自動エイリアスの数を返します。これは GetTextReplacement と共に使用して、これらすべてのエイリアスを反復処理できます。 OutputTextReplacements メソッドは、名前と値を含むすべてのユーザー名のエイリアスの一覧を出力します。
注ユーザー名のエイリアスに自動エイリアスと同じ名前が付けられている場合、ユーザー名のエイリアスは自動エイリアスを非表示にして、エイリアスの値を名前で取得するときにユーザー名のエイリアスが使用されるようにします。
>エンジン オプション
エンジンには、その動作を制御するさまざまなオプションがあります。 これらのオプションは、DEBUG_ENGOPT_XXX に一覧表示されます。 これらは GetEngineOptions によって返され、SetEngineOptions を使用して設定できます。 個々のオプションは、AddEngineOptions を使用して設定し、RemoveEngineOptions を使用して設定を解除できます。
割り込み
割り込みは、デバッガーに中断を強制する方法、または WinDbg で Ctrl キーを押しながら Break キーを押すなどして、現在のコマンドの処理を停止するようにエンジンに指示する方法です。
デバッガーへの中断を要求したり、デバッガーの現在のタスクを中断したりするには、SetInterrupt を使用します。 割り込みがあった場合にチェックするには、GetInterrupt を使用します。
注: デバッガー拡張機能から長いタスクを実行する場合は、拡張機能が定期的に GetInterrupt をチェックし、割り込みが要求された場合は処理を停止することをお勧めします。
デバッガーへの中断を要求するときに、ターゲットがブレークインを実行するのに時間がかかりすぎると、エンジンがタイムアウトする可能性があります。 これは、ターゲットが応答しない状態にある場合、または中断要求がリソースの競合によってブロックまたは遅延された場合に発生する可能性があります。 エンジンが待機する時間の長さは GetInterruptTimeout によって返され、SetInterruptTimeout を使用して設定できます。