#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. После выполнения задачи эта команда также завершает отлаживаемый процесс, который фактически останавливает отладку. Думаю, довольно грубо, но я могу смириться с этим решением.