Автоматическое подключение к дочернему процессу в Visual Studio во время отладки - PullRequest
36 голосов
/ 08 января 2009

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

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

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

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

EDIT

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

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

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

Ответы [ 5 ]

38 голосов
/ 27 января 2009

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

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

Ctrl + Alt + p - вызывает диалоговое окно «Присоединить к процессу»

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

Введите - присоединяет

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

11 голосов
/ 27 января 2009

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

2 голосов
/ 15 октября 2014

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

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

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

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

0 голосов
/ 08 января 2009

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

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

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

...