运行 VS 2012。我创建了一个加载项。我想处理 OnEnterBreakMode 事件。调用 Exec 方法。我尝试返回handled = true/false。处理程序永远不会被调用。我尝试了 DTE 和 DTE2 的一些变体。我转到“工具”菜单 > 单击“MyAddIn1”,然后调用 Exec 方法。我验证了该事件已绑定(bind)。我不知道加载项的生命周期是如何工作的。
StartEvents
不是覆盖,它没有连接到任何东西。我觉得很奇怪...
public void Exec(string commandName, vsCommandExecOption executeOption, ref object varIn, ref object varOut, ref bool handled)
{
handled = false;
if(executeOption == vsCommandExecOption.vsCommandExecOptionDoDefault)
{
if(commandName == "MyAddin1.Connect.MyAddin1")
{
//handled = true;
// Place the following code in the Exec method of the add-in:
EnvDTE.DebuggerEvents debugEvents = _applicationObject.Events.DebuggerEvents;
debugEvents.OnEnterBreakMode += new _dispDebuggerEvents_OnEnterBreakModeEventHandler(Connect.BreakHandler);
return;
}
}
}
private DTE _applicationObject;
private AddIn _addInInstance;
// Place the following Event handler code in the add-in:
// Needed to activate event handlers in Connect.Exec.
public static void StartEvents(DTE dte)
{
Console.WriteLine("Events are attached.");
}
// OnEnterBreakMode Event.
public static void BreakHandler(dbgEventReason reason, ref dbgExecutionAction execAction)
{
Console.WriteLine("Debugger enters break mode. " + "Reason: " + reason.ToString());
}
最佳答案
如果您为事件创建局部变量并订阅它,那么该变量将在离开作用域后被 GC 释放,并且您的事件处理程序将不会触发。
如果您将 debugEvents
设置为成员变量,那么它应该可以正常工作。
关于visual-studio-2012 - OnEnterBreakMode 不会触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21884621/