デバッグ エンジン (DE) は、インタープリターまたはオペレーティング システムと連携して、実行制御、ブレークポイント、式の評価などのデバッグ サービスを提供します。 DE は、デバッグ中のプログラムの状態を監視する役割を担います。 これを実現するために、DE は、CPU またはランタイムによって提供される API のどちらからでも、サポートされているランタイムで使用可能なすべてのメソッドを使用します。
たとえば、共通言語ランタイム (CLR) には、ICorDebugXXX インターフェイスを介して実行中のプログラムを監視するメカニズムが用意されています。 CLR をサポートする DE は、適切な ICorDebugXXX インターフェイスを使用して、デバッグ中のマネージド コード プログラムを追跡します。 その後、状態の変更がセッション デバッグ マネージャー (SDM) に伝達され、そのような情報が Visual Studio IDE に転送されます。
注
デバッグ エンジンは、特定のランタイム、つまり、デバッグ対象のプログラムが実行されるシステムを対象とします。 CLR はマネージド コードのランタイムであり、Win32 ランタイムはネイティブ Windows アプリケーション用です。 作成した言語がこれら 2 つのランタイムのいずれかをターゲットにできる場合、Visual Studio には必要なデバッグ エンジンが既に用意されています。 実装する必要があるのは、式エバリュエーターです。
デバッグ エンジンの操作
監視サービスは DE インターフェイスを介して実装され、デバッグ パッケージがさまざまな操作モード間で遷移する可能性があります。 詳細については、「 操作モード」を参照してください。 通常、実行時環境ごとに DE 実装は 1 つだけです。
注
Transact-SQL と JScript には個別の DE 実装がありますが、VBScript と JScript は 1 つの DE を共有します。
Visual Studio デバッグを使用すると、デバッグ エンジンは、Visual Studio シェルと同じプロセスで実行するか、デバッグ対象のターゲット プログラムと同じプロセスで、2 つの方法のいずれかを実行できます。 後者の形式は、通常、デバッグ中のプロセスが実際にはインタープリターの下で実行されているスクリプトである場合に発生します。 スクリプトを監視するには、デバッグ エンジンにインタープリターに関する詳しい知識が必要です。 この場合、インタープリターは実際にはランタイムです。デバッグ エンジンは、特定のランタイム実装用です。 さらに、1 つの DE の実装は、プロセスとマシンの境界 (リモート デバッグなど) に分割できます。
DE は、Visual Studio デバッグ インターフェイスを公開します。 すべての通信は COM を介して行われます。 DE がインプロセス、アウト プロセス、または別のコンピューターに読み込まれている場合でも、コンポーネント通信には影響しません。
DE は式エバリュエーター コンポーネントと連携して、その特定のランタイムの DE が式の構文を理解できるようにします。 DE は、シンボル ハンドラー コンポーネントとも連携して、言語コンパイラによって生成されたシンボリック デバッグ情報にアクセスします。 詳細については、「 式エバリュエーター と シンボル プロバイダー」を参照してください。