【问题标题】:Visual Studio: How to get IDebugEngine2 from VS Package (except IVsLoader)Visual Studio:如何从 VS 包中获取 IDebugEngine2(IVsLoader 除外)
【发布时间】:2013-03-20 12:50:25
【问题描述】:

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

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

【问题讨论】:

  • 如果您已经排除了某个特定的解决方案,通常值得给出一个理由——同样的原因可能会排除其他一些方法,或者可能存在一些误解,排除的解决方案是还是可以的。
  • 问题是——我仍在追求那个,但我遇到了一些问题,这可能只是一种误解。然而,整个解决方案似乎不合理,所以我在苦苦挣扎的同时寻求替代方案。

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


【解决方案1】:

你想用它做什么?调试器接口非常脆弱。通常有 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的实现
  • 在创建IDebugProgram2 的新实例后(从IDebugDefaultPort2 获得的IDebugProcess2 的副本,VS 传递给WatchForProviderEvents 被传递给IDebugProgram2 构造函数),我的代码调用IDebugPortNotify2.AddProgramNode
  • 环境回调我的调试引擎的构造函数

【讨论】:

  • 我明白了,所以每个会话都会创建一个新的调试引擎?我要做的是获取正确的实例并调用SetException,因为普通API的SetBreakWhenThrown由于connect.microsoft.com/VisualStudio/feedback/details/530408/…而无法使用。
  • 该方法会根据调试中的设置自动调用 →例外对话框。
  • 我知道,我想自动切换此对话框的内容(基本上是一种快速打开/关闭所有内容的方法)。由于 SetBreakWhenThrown 太慢了,我的选择是有限的。我知道我以这种方式所做的任何更改都不会在对话框中看到,但我也可以替换对话框(因为我正在制作 VS 扩展)。
  • 我可能已经找到了答案 — 使用 IVsDebugger.AdviseDebugEventCallback 和 IDebugEventCallback2。每个 Event 调用都应该传入一个引擎。暂时不能尝试,但我一定会尝试。
  • 您最好发布另一个问题来询问这个问题 - 对于可能有效的异常设置,我有一个更简单的答案。
【解决方案2】:

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

请查看我的帖子here了解更多信息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-04
    • 2011-12-12
    • 1970-01-01
    • 1970-01-01
    • 2021-08-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多