调试引擎

调试引擎(DE)与解释器或操作系统配合,以提供调试服务,例如执行控制、断点和表达式计算。 DE 负责监视正在调试的程序的状态。 为此,DE 会使用受支持运行时中可用的任何方法,无论是从 CPU 还是运行时提供的 API。

例如,公共语言运行时(CLR)提供通过 ICorDebugXXX 接口监视正在运行的程序的机制。 支持 CLR 的 DE 使用适当的 ICorDebugXXX 接口跟踪正在调试的托管代码程序。 然后,它将状态的任何更改传达给会话调试管理器(SDM),后者会将这些信息转发到 Visual Studio IDE。

注释

调试引擎针对特定的运行时系统,即程序正在运行的系统。 CLR 是托管代码的运行时,Win32 运行时适用于本机 Windows 应用程序。 如果创建的语言可以面向这两个运行时之一,Visual Studio 已提供必要的调试引擎。 你只需实现一个表达式计算器。

调试引擎操作

监视服务通过 DE 接口实现,并可能导致调试包在不同操作模式之间转换。 有关详细信息,请参阅 作模式。 每个运行时环境通常只有一个 DE 实现。

注释

虽然有单独的 DE 实现用于 Transact-SQL 和 JScript,但 VBScript 和 JScript 共享单个 DE。

Visual Studio 调试使调试引擎能够运行以下两种方式之一:在与 Visual Studio shell 相同的进程中,或在与正在调试的目标程序相同的进程中运行。 在调试的进程实际上是在解释器下运行的脚本时,通常会发生后一种形式。 调试引擎必须对解释器有深入了解才能监视脚本。 在这种情况下,解释器实际上是一个运行时;调试引擎适用于特定的运行时实现。 此外,单个 DE 的实现可以跨进程和计算机边界(例如远程调试)进行拆分。

DE 公开 Visual Studio 调试接口。 所有通信都通过 COM 进行。 无论 DE 是加载进程内、进程外还是在另一台计算机上,它都不会影响组件通信。

DE 与表达式评估器组件协作,使 DE 能够在特定运行时理解表达式的语法。 DE 还与符号处理程序组件配合使用,以访问语言编译器生成的符号调试信息。 有关详细信息,请参阅 表达式计算器符号提供程序

另请参阅