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

时间:2013-03-20 12:50:25

标签: c# visual-studio visual-studio-extensions

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

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

2 个答案:

答案 0 :(得分:2)

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

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

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

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

  • 我的代码调用IVsDebugger2.LaunchDebugTargets2
  • 环境回调我对IDebugProgramProvider2.WatchForProviderEvents
  • 的实施
  • 创建IDebugProgram2的新实例(从传递给IDebugProcess2的VS IDebugDefaultPort2获取的WatchForProviderEvents副本传递给IDebugProgram2构造函数),我的代码调用IDebugPortNotify2.AddProgramNode
  • 环境回调我的调试引擎的构造函数

答案 1 :(得分:-1)

我最近正在调查同一问题,最终发现您可以通过ILocalRegistry3.CreateInstance轻松地做到这一点!

有关更多信息,请参阅我的帖子here