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

StackOverflow https://stackoverflow.com/questions/422768

Вопрос

При написании плагинов для media center ваш плагин размещается в ehexthost.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

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

Это было полезно?

Решение

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

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

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

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

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

Войти - прикрепляет

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

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

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

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

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

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

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

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

УВЕДОМЛЕНИЕ:Там "Command" заполнено как имя исполняемого файла, а "Attach" должно быть "yes".

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top