【发布时间】:2021-07-21 10:19:00
【问题描述】:
我目前正在尝试使用 Visual Studio 扩展。 我需要订阅一个在实际调试器停止之前被调用的事件。 基本上我只是附加到托管进程(不通过 F5 运行)。问题是停止调试只是“分离”进程,然后进程继续运行。 我打算用这个事件来通知我们的进程退出
我有一个实现IDebugEventCallback2、IVsDebuggerEvents 和IVsDebugProcessNotify 的类。
class MyDebugger : IDebugEventCallback2, IVsDebuggerEvents, IVsDebugProcessNotify
在这个类中,有一个成员使用IVsDebugger 的AdviseDebugEventCallback() 和AdviseDebuggerEvents() 事件订阅调试器事件。
_debugger = Package.GetGlobalService(typeof(SVsShellDebugger)) as IVsDebugger;
if (_debugger != null)
{
_debugger.AdviseDebugEventCallback(this);
_debugger.AdviseDebuggerEvents(this, out _debuggerEventsCookie);
}
然而,我注意到从AdviseDebugEventCallback 的 Event() 处理程序触发的事件并不总是在实际停止调试之前被调用(在我单击停止调试后,断点之后的下几行仍然执行)。大约 4 次或 5 次,来自IDebugCustomEvent110 的事件(2615D9BC-1948-4D21-81EE-7A963F20CF59 的 riidEvent)在附加进程的任何行被进一步执行之前被调用。我仍然需要消化 Event() 处理程序中触发的事件的详细信息,但是查看断点,似乎我不能依赖它,因为它只能按照我的预期工作,大约 5 次中有 4 次。
我目前正在查看IVsDebugProcessNotify 中的BeforeStopDebuggingProcess() 方法。
但是,我不知道如何从此界面“订阅”或“建议”。
有什么建议吗?关于这个主题的谷歌搜索结果并不多。
谢谢!
【问题讨论】:
标签: visual-studio vsix visual-studio-addins vs-extensibility