3

是否可以在不使用方法(在此处描述)的情况下从 Visual Studio 包中获取IDebugEngine2MSDN )的列表或特定实例? IVsLoader

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

4

2 回答 2

2

你想用它做什么?调试器接口非常脆弱。通常有 2、3 或更多可能的方式来使用调试器接口执行操作,但特定的 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
  • 在创建一个新实例(从VS 传递给的 VS 获得IDebugProgram2的副本传递给构造函数)之后,我的代码调用IDebugProcess2IDebugDefaultPort2WatchForProviderEventsIDebugProgram2IDebugPortNotify2.AddProgramNode
  • 环境回调我的调试引擎的构造函数
于 2013-03-20T13:49:15.573 回答
-1

我最近正在调查同样的问题,最终发现您可以通过ILocalRegistry3.CreateInstance!

在此处查看我的帖子以获取更多信息

于 2020-05-26T10:44:15.420 回答