在 Visual Studio 扩展中,如何检测调试器何时继续
In a Visual Studio Extension, how to detect when the debugger Continues
我需要 Visual Studio 扩展来对调试事件做出反应。我已经注册了一个 IDebugEventCallback2
并且我正在接收事件,但是我从每个事件中得到的只是一个不透明的 IDebugEvent2
和一个 Guid,其中许多不仅没有记录而且没有出现在任何地方网络(或在我的注册表中)。
我目前的具体要求是知道进程何时继续 - 即。用户点击了继续、运行 光标等。我应该寻找什么 Guid?
或者是否有我应该订阅的其他事件系列?
(更一般地说,当许多事件没有出现在 MSDN 或其他任何地方时,我是否缺少某种方法来了解传送到我的 IDebugEventCallback2::Event
回调的事件?谢谢!)
您可能误会了,IDebugXxx 接口实际上是为了创建您自己的调试引擎。也许对于查看现有引擎中正在发生的事情仍然有用,您应该使用 QueryInterface() 来发现与事件匹配的特定接口。像 IDebugEngineCreateEvent2、IDebugProcessCreateEvent2、IDebugProcessDestroyEvent2 等。它们有很多,它们列在 VSSDK\VisualStudioIntegration\Common\Inc\msdbg.h header 中并包括它们的 IID。
最好的办法是查看 this sample,它显示了如何将事件通知破解到特定接口中。 AD7Events.cs 源文件显示包装器。请记住,制作此示例是为了展示如何创建引擎,而不是如何使用 VS 中已内置的引擎。
但是,是的,您不会从中得到一个 "continue debug" 事件。调试引擎不需要该事件,因为它已经负责自行处理该事件。它已经知道何时调用 IDebugProgram3::Continue().
您正在寻找的肯定是 IVsDebugger.AdviseDebuggerEvents(). That's the one that tells you what the built-in debugger is doing. You need to pass an object of a class that implements IVsDebuggerEvents, your OnModeChanged() method will be called with a DBGMODE notification. I don't see a lot of fantastic examples that demonstrate usage, this web page 可能会有帮助。
没有简单的方法可以做到这一点。 Continue 和 运行 cursor 等操作是由 Visual Studio 实现的抽象,不对应于任何唯一事件) 关于调试引擎。调试引擎事件报告界面 IDebugEventCallback2
将使您能够仅在创建断点或到达断点时等细粒度事件上得到通知。
虽然 Visual Studio 使您能够以编程方式执行 Continue 和 运行 cursor 等操作,但它确实没有提供在他们被带走时得到通知的直接方式。
您可以在事件处理程序中使用 EnvDTE.DebuggerEvents.OnXxx events to get notified when something is about to happen. In particular, the OnEnterBreakMode
event enables you to intercept a breakpoint hit and possibly take an action. You can also inspect all the details of the reached breakpoint(s) using the current EnvDTE.Debugger。
现在,通过一些努力,您可以使用这些构造来实现与所有 Visual Studio 调试操作相对应的事件,包括 Continue 和 运行 cursor 准确。如果您需要 EnvDTE.DebuggerEvents
未提供的其他事件(例如插入断点时),您别无选择,只能使用 IDebugEventCallback2.Event
。在这种情况下,如果您有特定事件的想法,请明确提及它们,我可能会告诉您相应的 IDebugEventCallback2.Event
GUID。
我需要 Visual Studio 扩展来对调试事件做出反应。我已经注册了一个 IDebugEventCallback2
并且我正在接收事件,但是我从每个事件中得到的只是一个不透明的 IDebugEvent2
和一个 Guid,其中许多不仅没有记录而且没有出现在任何地方网络(或在我的注册表中)。
我目前的具体要求是知道进程何时继续 - 即。用户点击了继续、运行 光标等。我应该寻找什么 Guid?
或者是否有我应该订阅的其他事件系列?
(更一般地说,当许多事件没有出现在 MSDN 或其他任何地方时,我是否缺少某种方法来了解传送到我的 IDebugEventCallback2::Event
回调的事件?谢谢!)
您可能误会了,IDebugXxx 接口实际上是为了创建您自己的调试引擎。也许对于查看现有引擎中正在发生的事情仍然有用,您应该使用 QueryInterface() 来发现与事件匹配的特定接口。像 IDebugEngineCreateEvent2、IDebugProcessCreateEvent2、IDebugProcessDestroyEvent2 等。它们有很多,它们列在 VSSDK\VisualStudioIntegration\Common\Inc\msdbg.h header 中并包括它们的 IID。
最好的办法是查看 this sample,它显示了如何将事件通知破解到特定接口中。 AD7Events.cs 源文件显示包装器。请记住,制作此示例是为了展示如何创建引擎,而不是如何使用 VS 中已内置的引擎。
但是,是的,您不会从中得到一个 "continue debug" 事件。调试引擎不需要该事件,因为它已经负责自行处理该事件。它已经知道何时调用 IDebugProgram3::Continue().
您正在寻找的肯定是 IVsDebugger.AdviseDebuggerEvents(). That's the one that tells you what the built-in debugger is doing. You need to pass an object of a class that implements IVsDebuggerEvents, your OnModeChanged() method will be called with a DBGMODE notification. I don't see a lot of fantastic examples that demonstrate usage, this web page 可能会有帮助。
没有简单的方法可以做到这一点。 Continue 和 运行 cursor 等操作是由 Visual Studio 实现的抽象,不对应于任何唯一事件) 关于调试引擎。调试引擎事件报告界面 IDebugEventCallback2
将使您能够仅在创建断点或到达断点时等细粒度事件上得到通知。
虽然 Visual Studio 使您能够以编程方式执行 Continue 和 运行 cursor 等操作,但它确实没有提供在他们被带走时得到通知的直接方式。
您可以在事件处理程序中使用 EnvDTE.DebuggerEvents.OnXxx events to get notified when something is about to happen. In particular, the OnEnterBreakMode
event enables you to intercept a breakpoint hit and possibly take an action. You can also inspect all the details of the reached breakpoint(s) using the current EnvDTE.Debugger。
现在,通过一些努力,您可以使用这些构造来实现与所有 Visual Studio 调试操作相对应的事件,包括 Continue 和 运行 cursor 准确。如果您需要 EnvDTE.DebuggerEvents
未提供的其他事件(例如插入断点时),您别无选择,只能使用 IDebugEventCallback2.Event
。在这种情况下,如果您有特定事件的想法,请明确提及它们,我可能会告诉您相应的 IDebugEventCallback2.Event
GUID。