调试 Visual Studio 扩展

调试 Visual Studio 扩展时,在主 Visual Studio IDE 中运行调试器时,将使用称为实验实例的 Visual Studio 的特殊实例托管扩展。 这两个实例相互独立地并行运行。 本文介绍如何在 Visual Studio IDE 的实验实例中运行时调试使用 VisualStudio.Extensibility SDK 创建的扩展。

扩展进程

调试过程略有不同,具体取决于扩展是在进程内还是进程外运行。 请参阅 创建第一个与 VSSDK 兼容的 VisualStudio.Extensibility 扩展插件。 使用进程外扩展,扩展在 Visual Studio 扩展的专用进程中运行。 此过程称为 Microsoft.ServiceHub.Host.Extensibility,负责协调 Visual Studio IDE 进程与托管您扩展的进程之间的所有通信。 使用 F5 启动扩展时,Visual Studio 将启动 Visual Studio 实验实例并连接到托管扩展的进程。 通常不需要关注确切的过程,因为通过按 F5 Visual Studio IDE 从扩展项目启动调试器时,Visual Studio 会找到将调试器连接到的正确进程。

启动调试会话时,不会立即加载扩展程序集及其符号。 在加载扩展之前,Visual Studio 会跟踪可以激活扩展的位置。 此信息在内部实例 VisualStudioContribution中管理。 即使在加载扩展之前,Visual Studio 也包含有关它可能激活的位置的信息,例如当用户选择特定菜单项、按工具栏按钮或将特定类型的文件加载到编辑器中。 扩展的程序集在 IDE 中激活之前不会加载。 因此,调试时,首先需要在 Visual Studio IDE 中采取措施来触发要加载的扩展。 例如,可能需要选择扩展的菜单项或工具栏按钮。 此时,扩展程序集被加载,初始化代码被执行,您可以设置并命中断点以及逐步调试代码。 在扩展中运行的第一个代码是 InitializeAsync 类上的 Extension 方法,下一个方法是 InitializeServices

进程和调用堆栈

如果扩展正在进行中,则调用堆栈包括 Visual Studio 堆栈帧以及扩展的堆栈帧。 符号通常在 Visual Studio 中不可用,但您可以查看 Visual Studio 调用您的扩展时的调用信息。

使用进程外扩展,只能看到扩展的调用堆栈;Visual Studio 堆栈帧位于单独的进程中。 Visual Studio 通过与 JsonRpc 兼容的接口调用你的扩展,ServiceHub 主机对调用进行路由,然后在回调中开始在你的进程中执行。 回调返回时,控件将返回到 Visual Studio。

状态会根据需要通过各种方法传递给你的扩展,并由 IClientContext 实例包装以便于使用,但务必注意,它是状态的快照,可能会在拍摄快照的时间与从扩展代码读取或在调试器中查看的时间之间发生变化。

ServiceHub 主机进程中有一些内部代码负责处理 RPC(远程过程调用) 的代理。 如果此层中发生故障,则不可见。 此类错误应报告为产品问题。

在 Visual Studio 的实验实例中调试扩展

  1. 打开扩展项目。

  2. 在您扩展的主类中派生自InitializeServices的方法中设置一个断点,例如Extension。 若要在代码行上设置断点,请单击该行,然后按 F9

  3. 在主菜单中,选择 “调试 > 开始调试 ”或按 F5。 Visual Studio 实验实例已启动;同时,ServiceHub 主机进程启动。

  4. 在 Visual Studio 的实验性实例中执行步骤,以使您的扩展激活或重现您要调试的场景。

  5. Visual Studio 在断点处停止。

    显示 Visual Studio 调试扩展的屏幕截图。

小窍门

拥有多个监视器很方便,因此可以在两个不同的监视器上同时看到调试器和实验实例。 你可能想要更改实验实例中的主题,使其更加明显地表明你在任意给定时间使用哪个 IDE。 请参阅 Visual Studio 中的更改字体、颜色和主题

启动或重置实验实例

可以使用快捷方式 ResetExperimentalStartExperimental VSSDK 文件夹(在 Visual Studio 安装文件夹下)重置或启动实验实例。

在 Visual Studio 2026 及更高版本中,还可以使用 “扩展>扩展开发 ”菜单上的命令启动或重置实验实例。

用于重置或启动 Visual Studio 实验实例的菜单命令。

使用诊断浏览器调试扩展

有关详细信息,请参阅 VisualStudio.Extensibility Diagnostics Explorer

Troubleshooting

启动调试器时,如果 看到当前产品不支持此扩展错误,请打开 .vsixmanifest 该文件并检查 InstallationTarget 元素。 不支持安装目标 Microsoft.VisualStudio.IntegratedShell ;请改用 Microsoft.VisualStudio.Community 。 请参阅 VSIX 扩展架构 2.0 参考