Автоматическое присоединение к дочернему процессу в Visual Studio во время отладки

При написании плагинов для медиацентра ваш плагин размещается на ehexthost.exe, этот exe запускается с ehshell.exe, и у вас нет возможности запустить его напрямую, вместо этого вы передаете специальный параметр ehshell.exe, который запускает плагин в отдельном процессе.

Когда мы отлаживаем медиа-браузер, я нахожу процесс присоединения ко второму процессу неуклюжим, я знаю об Debugger.Attach, а также о некоторых записях специальный реестр, которые я могу использовать.

Оба эти метода мне не подходят. Я хочу нажать F5 и автоматически подключить мой текущий экземпляр Visual Studio к дочернему процессу. Можно ли это сделать?

Если есть плагин для VS, который позволяет мне реализовать эту функциональность, я был бы доволен.

РЕДАКТИРОВАТЬ

В итоге я выбрал следующий макрос:

Public Sub CompileRunAndAttachToEhExtHost()

    DTE.Solution.SolutionBuild.Build(True)
    DTE.Solution.SolutionBuild.Debug()

    Dim trd As System.Threading.Thread = New System.Threading.Thread(AddressOf AttachToEhExtHost)
    trd.Start()

End Sub

Public Sub AttachToEhExtHost()
    Dim i As Integer = 0
    Do Until i = 50
        i = i + 1
        Try

            For Each proc As EnvDTE.Process In DTE.Debugger.LocalProcesses
                If (proc.Name.IndexOf("ehexthost.exe") <> -1) Then
                    proc.Attach()
                    Exit Sub
                End If
            Next
        Catch e As Exception
            ' dont care - stuff may be busy 
        End Try
        Threading.Thread.Sleep(100)
    Loop
End Sub

Кроме того, я описал процесс создания начни это в своем блоге.

есть другой способ с новым интерфейсом Debugger2, codeplex.com/lazy/SourceControl/changeset/view/20095#307770

Pablo Retyk 28.01.2009 10:15

Есть ли преимущество в использовании интерфейса Debugger2?

Sam Saffron 29.01.2009 01:34

да, вместо того, чтобы зацикливаться на DTE.Debugger.LocalProcesses, вы можете просто получить процесс proc = debugger2.GetProcesses (trans, "") .Item (processName)

Pablo Retyk 29.01.2009 14:40

Мой VB довольно ржавый - я получаю «Имя 'proc' не объявлено» - есть идеи, что нужно исправить?

Tim 10.05.2011 19:08

Догадаться. Должно быть следующее: Для каждой процедуры как EnvDTE.Process в DTE.Debugger.LocalProcesses

Tim 10.05.2011 19:12
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
36
5
19 823
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Вы можете автоматически подключиться к процессу, нажав F5, если вы настроили что-то подобное в Visual Studio:

http://vvcap.net/db/ujYL7zeN_n_RgeprqCSM.htp

примечание: там "Command" заполнено как имя исполняемого файла, а "Attach" должно быть "да"

Спасибо! Но этот трюк не работает для проектов C#, у вас нет такой опции в списке отладки, только возможность запуска внешней программы.

Sam Saffron 08.01.2009 05:04

Думаю, я понимаю, что вы имеете в виду ... вы можете создать «фиктивный» проект на C++ и добавить его в свое решение. Пока он прикрепляет правильный исполняемый файл, вы можете отлаживать его.

galets 13.01.2009 20:36

Ознакомьтесь с написанным мной плагином VisualStudio под названием Ленивый.

спасибо, я написал это, когда у меня был похожий сценарий, подобный вашему, мой процесс был вызван другим процессом, и мне нужно было отладить инициализацию моего процесса, поэтому мне нужно было прикрепить его, как только он начнется. Если у вас есть какие-либо вопросы, дайте мне знать. "Это работает в моей машине"

Pablo Retyk 27.01.2009 14:36

После того, как я его установил, он отображается только в VS2008, а не в VS2010.

Andreas Haferburg 21.01.2013 18:08

Привет, @pablito, есть ли у вас планы по переносу вашего плагина на VS2010 / 2012 +?

Bora 13.06.2014 15:18

не обновлял его в течение долгого времени, но, поскольку некоторым кажется заинтересованным, я скоро портирую его на vs2010 / 12.

Pablo Retyk 01.07.2014 18:34
Ответ принят как подходящий

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

    For Each process In DTE.Debugger.LocalProcesses
        If (process.Name.IndexOf("aspnet_wp.exe") <> -1) Then
            process.Attach()
            Exit Sub
        End If
    Next

Спасибо, чувак, я использовал это для подключения к WebDev.WebServer и IE, когда нажал F4

Allen Rice 23.07.2009 19:25

какие-либо предложения, как это сделать в VS2012, теперь, когда они удалили макросы?

mutex 09.07.2013 07:26

На самом деле вам больше не нужно! По крайней мере, не для того, для чего мне это было нужно. Они добавили новую опцию для веб-проектов: «Не открывать страницу. Дождаться запроса от внешнего приложения». В рамках проекта -> веб-настройки. Я не уверен, как бы я это сделал, если бы мне нужно было подключиться к не-веб-процессу. Простите!

Jab 17.07.2013 00:12

Для VS2012 макросы были удалены, но вы все равно можете сделать это довольно быстро с помощью стандартных сочетаний клавиш. Например, чтобы прикрепить к iisexpress.exe:

Ctrl + Alt + p - открывает диалоговое окно Attach To Process

i - переходит к первому процессу в списке, начинающемуся с i (для меня это iisexpress.exe)

Enter - прикрепляет

Для супер скорости можно также Отключите предупреждение безопасности Visual Studio Attach при отладке IIS.

Я отлаживал плагин C++ во внешнем порожденном процессе, который вылетал из-за выдачи исключения при запуске, и это отлично сработало для меня:

Добавьте бесплатный Повторно подключите расширение для Visual Studio. Попросите его повторно присоединиться к имени процесса перед его запуском. Появится модальное диалоговое окно, в котором говорится, что он ожидает запуска процесса по имени.

Теперь запустите процесс, и отладчик Visual Studio немедленно подключится, перехватывая исключения и достигая точек останова.

(Это также было в медиа-плагине, исключение обычно перехватывается и повторно генерируется хост-процессом в контексте Delphi, поэтому мне нужно было прервать работу, прежде чем это произошло).

Другие вопросы по теме