Как я могу определить отлаженную программу / процесс в обработчиках EnvDTE.Events.DebuggerEvents?

#visual-studio-2019 #visual-studio-extensions

#visual-studio-2019 #visual-studio-extensions

Вопрос:

Я создаю расширение Visual Studio, которое выполняет некоторые задачи при остановке отладки определенного приложения. Это мой код для обработки события debugger:

     ...
    DTE2 ide = Microsoft.VisualStudio.Shell.ServiceProvider.GlobalProvider.GetService(typeof(DTE)) as DTE2;
    if (ide != null)
    {
        debuggerEvents = ide.Events.DebuggerEvents;
        debuggerEvents.OnEnterDesignMode  = DebuggerEvents_OnEnterDesignMode;
    }
}

private static void DebuggerEvents_OnEnterDesignMode(dbgEventReason Reason)
{
    ThreadHelper.ThrowIfNotOnUIThread();

    DTE2 ide = Microsoft.VisualStudio.Shell.ServiceProvider.GlobalProvider.GetService(typeof(DTE)) as DTE2;
    if (ide != null amp;amp; ide.Debugger.CurrentProcess != null)
    {
        DebuggedProcName = ide.Debugger.CurrentProcess.Name;
    }

    if (Reason == dbgEventReason.dbgEventReasonStopDebugging amp;amp;
        DebuggedProcName == "MyApp")
    {
        ...
    }
}
  

Проблема в том, что ide.Отладчик.CurrentProcess и .CurrentProgram имеет значение null в OnEnterDesignMode() . Они не равны нулю в OnEnterBreakMode(), но этот может не вызываться. Как я могу определить отлаженную в данный момент программу / процесс в расширении Visual Studio?

Комментарии:

1. Вы вошли в событие OnEnterDesignMode , а затем столкнулись с проблемой ide.Debugger.CurrentProcess null? Или попробуйте использовать DTE2 ide = Package.GetGlobalService(typeof(DTE)) as DTE2;

2. Да, именно это и произошло. То же самое в OnEnterRunMode () . Единственный обработчик, который может предоставлять программу / процесс, — это OnEnterBreakMode() . Второе предложение не улучшило ситуацию.

3. Согласно приведенной ниже официальной ссылке , OnEnterDesignMode event средство выходит из режима запуска / отладки, поэтому не может получить текущий процесс отладки. Запускается при выходе из режима выполнения или режима отладки и когда отладчик устанавливает режим разработки после отладки.

Ответ №1:

Я хотел выполнить конкретную задачу, если отладка определенного проекта будет остановлена. Поскольку использование обработчика событий кажется невозможным, я помог себе командой меню, которая выполняется при нажатии Ctrl F5. После выполнения задачи эта команда также завершает отлаживаемый процесс, который фактически останавливает отладку. Думаю, довольно грубо, но я могу смириться с этим решением.