调试引擎

调试引擎 (DE) 与解释器或操作系统协同工作,提供诸如执行控制、断点和表达式求值等调试服务。 DE 负责监控被调试程序的状态。 为此,DE 使用受支持的运行时中可用的任何方法,无论是来自 CPU 还是运行时提供的 API。

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

注意

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

调试引擎操作

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

注意

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

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

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

DE 与表达式求值器组件一起工作,以便针对特定运行时的 DE 能够理解表达式的语法。 DE 还与符号处理程序组件配合使用,以访问由语言编译器生成的符号调试信息。 要了解更多信息,请参阅 表达式计算器符号提供程序

另请参阅