При написании плагинов для медиацентра ваш плагин размещается на 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?
да, вместо того, чтобы зацикливаться на DTE.Debugger.LocalProcesses, вы можете просто получить процесс proc = debugger2.GetProcesses (trans, "") .Item (processName)
Мой VB довольно ржавый - я получаю «Имя 'proc' не объявлено» - есть идеи, что нужно исправить?
Догадаться. Должно быть следующее: Для каждой процедуры как EnvDTE.Process в DTE.Debugger.LocalProcesses





Вы можете автоматически подключиться к процессу, нажав F5, если вы настроили что-то подобное в Visual Studio:
http://vvcap.net/db/ujYL7zeN_n_RgeprqCSM.htp
примечание: там "Command" заполнено как имя исполняемого файла, а "Attach" должно быть "да"
Спасибо! Но этот трюк не работает для проектов C#, у вас нет такой опции в списке отладки, только возможность запуска внешней программы.
Думаю, я понимаю, что вы имеете в виду ... вы можете создать «фиктивный» проект на C++ и добавить его в свое решение. Пока он прикрепляет правильный исполняемый файл, вы можете отлаживать его.
Ознакомьтесь с написанным мной плагином VisualStudio под названием Ленивый.
спасибо, я написал это, когда у меня был похожий сценарий, подобный вашему, мой процесс был вызван другим процессом, и мне нужно было отладить инициализацию моего процесса, поэтому мне нужно было прикрепить его, как только он начнется. Если у вас есть какие-либо вопросы, дайте мне знать. "Это работает в моей машине"
После того, как я его установил, он отображается только в VS2008, а не в VS2010.
Привет, @pablito, есть ли у вас планы по переносу вашего плагина на VS2010 / 2012 +?
не обновлял его в течение долгого времени, но, поскольку некоторым кажется заинтересованным, я скоро портирую его на vs2010 / 12.
Я бы использовал макрос. Я переопределил свою функцию 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
какие-либо предложения, как это сделать в VS2012, теперь, когда они удалили макросы?
На самом деле вам больше не нужно! По крайней мере, не для того, для чего мне это было нужно. Они добавили новую опцию для веб-проектов: «Не открывать страницу. Дождаться запроса от внешнего приложения». В рамках проекта -> веб-настройки. Я не уверен, как бы я это сделал, если бы мне нужно было подключиться к не-веб-процессу. Простите!
Для VS2012 макросы были удалены, но вы все равно можете сделать это довольно быстро с помощью стандартных сочетаний клавиш. Например, чтобы прикрепить к iisexpress.exe:
Ctrl + Alt + p - открывает диалоговое окно Attach To Process
i - переходит к первому процессу в списке, начинающемуся с i (для меня это iisexpress.exe)
Enter - прикрепляет
Для супер скорости можно также Отключите предупреждение безопасности Visual Studio Attach при отладке IIS.
Я отлаживал плагин C++ во внешнем порожденном процессе, который вылетал из-за выдачи исключения при запуске, и это отлично сработало для меня:
Добавьте бесплатный Повторно подключите расширение для Visual Studio. Попросите его повторно присоединиться к имени процесса перед его запуском. Появится модальное диалоговое окно, в котором говорится, что он ожидает запуска процесса по имени.
Теперь запустите процесс, и отладчик Visual Studio немедленно подключится, перехватывая исключения и достигая точек останова.
(Это также было в медиа-плагине, исключение обычно перехватывается и повторно генерируется хост-процессом в контексте Delphi, поэтому мне нужно было прервать работу, прежде чем это произошло).
есть другой способ с новым интерфейсом Debugger2, codeplex.com/lazy/SourceControl/changeset/view/20095#307770