Visual Studio:如何从VS包中获取IDebugEngine2(IVsLoader除外)

是否可以从Visual Studio包中获取IDebugEngine2 ( MSDN )的列表或特定实例,而不使用IVsLoader方法( 此处描述)?

通常我希望大多数服务可以通过GetService直接或通过其他服务获得。 但我不能轻易找到任何可以提供调试引擎的东西。

你想用它做什么? 调试器接口非常脆弱。 通常有两种,三种或更多种可能的方式来使用调试器接口执行操作,但特定的DE实现仅支持其中一种。 调试引擎实现者不希望从Visual Studio本身以外的任何地方直接调用他们的调试引擎接口,并且如果你尝试它,则破坏调试器function的风险介于非常高和保证之间。

例如,以下是告诉DE启动和/或附加到流程的一些可能方法:

  • IDebugEngineLaunch2.LaunchSuspended
  • IDebugPortEx2.LaunchSuspended
  • IDebugProgramEx2.Attach
  • IDebugProgramNode2.Attach_V7
  • IDebugProgramNodeAttach2.OnAttach
  • IDebugEngine2.Attach
  • IVsDebuggableProjectCfg.DebugLaunch
  • VsShellUtilities.LaunchDebugger
  • IVsDebugger2.LaunchDebugTargets
  • IVsDebugger2.LaunchDebugTargets2

编辑1:对于我的Java调试器 ,调试引擎由会话管理器使用以下堆栈创建:

  • 我的代码调用了IVsDebugger2.LaunchDebugTargets2
  • 环境回调我的IDebugProgramProvider2.WatchForProviderEvents实现
  • 在创建IDebugProgram2的新实例(从传递给WatchForProviderEvents VS传递给WatchForProviderEvents传递给IDebugProgram2构造函数)之后,我的代码调用了IDebugPortNotify2.AddProgramNode
  • 环境回调我的调试引擎的构造函数