gpt4 book ai didi

c# - Visual Studio 扩展包中未触发 DebuggerEvents.OnEnterBreakMode

转载 作者:太空宇宙 更新时间:2023-11-03 18:30:58 24 4
gpt4 key购买 nike

我编写了一个订阅 DebuggerEvents.OnEnterBreakMode 事件的 visual studio 扩展包。但是这个事件永远不会被引发。

这是一些代码:

protected override void Initialize()
{
base.Initialize();

applicationObject = (DTE2) GetService(typeof (DTE));

applicationObject.Events.BuildEvents.OnBuildDone += BuildEventsOnOnBuildDone;
applicationObject.Events.DebuggerEvents.OnEnterBreakMode += DebuggerEventsOnOnEnterBreakMode;
}

但是永远不会调用方法 DebuggerEventsOnOnEnterBreakMode。方法 BuildEventsOnOnBuildDone 被调用。

为什么会发生这种情况?

最佳答案

我知道这听起来很傻,但是为了监听 DebuggerEvents 事件,您需要维护对 DebuggerEvent 本身的引用。

DebuggerEvents _debuggerEvents;

protected override void Initialize() {
applicationObject = (DTE2) GetService(typeof (DTE));

_debuggerEvents = applicationObject.Events.DebuggerEvents;
_debuggerEvents.OnEnterBreakMode += DebuggerEventsOnOnEnterBreakMode

这样做的原因很微妙。 DebuggerEvents 实际上是一个 COM/CCW 对象,它是在访问 DTE.DebuggerEvents 属性时按需创建的。事件处理程序代码不会使 CCW 保持事件状态,因此下一次 GC 可能会收集 DebuggerEvents 属性并带走事件处理程序。

这是一个非常奇怪的错误,特定于 CCW 和事件。我听说它被称为“有史以来最令人烦恼的错误”,这与事实相去不远

关于c# - Visual Studio 扩展包中未触发 DebuggerEvents.OnEnterBreakMode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22570121/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com