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

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

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

Оба эти метода точно не соответствуют моему счету. Я хочу нажать 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

Кроме того, я рассказал о том, как получить это в своем блоге.

Ответ 1

Я бы использовал макрос. Я переопределил функцию 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

Ответ 2

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

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

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

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

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

Ответ 3

Просмотрите плагин VisualStudio, который я написал, названный Lazy.

Ответ 4

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

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

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

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

Ответ 5

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

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

Извещение: там "Команда" заполняется как исполняемое имя, а "Прикрепить" должно быть "да"