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
- 环境回调我的调试引擎的构造函数