Visual Studio: автоматически присоединяется к процессу, когда процесс порождается

Я хочу прикрепить к процессу (a.exe), как только он будет создан, совместим ли это с VS? Я знаю только название процесса. На самом деле то, что я хочу выполнить, задает точку останова в коде С#, но код принадлежит другому исполняемому файлу, который будет запущен текущим запущенным приложением (c.exe). Код находится внутри периода инициализации, поэтому для меня невозможно выполнить вручную.

Ответ 1

Когда я столкнулся с этой ситуацией раньше (и я контролировал оба процесса), я нашел подходящее решение - поместить вызов Debugger.Launch() в точке входа в процесс нереста. Затем VS отобразит диалоговое окно и добавит его в процесс.

Ответ 2

См. Статью MSDN, Как: Автоматически запускать отладчик - это позволит пропустить множество диалоговых окон подтверждения щелчка занятой работой [без отключения UAC или других сообщений]. В статье перечислены следующие шаги:

  1. Запустите редактор реестра (regedit).
  2. В редакторе реестра откройте папку HKEY_LOCAL_MACHINE.
  3. Перейдите к HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\currentversion\опции выполнения файла изображения.
  4. В папке " Параметры выполнения файла изображения " найдите имя приложения, которое вы хотите отладить, например myapp.exe. Если вы не можете найти приложение, которое хотите отладить:
    а. Щелкните правой кнопкой мыши папку " Параметры выполнения файла изображения " и в контекстном меню выберите " Новый ключ".
    б. Щелкните правой кнопкой мыши новый ключ и в контекстном меню выберите " Переименовать". с. Измените имя ключа на имя вашего приложения; myapp.exe, в этом примере.
  5. Щелкните правой кнопкой мыши папку myapp.exe и в контекстном меню выберите " Новое значение строки".
  6. Щелкните правой кнопкой мыши новое строковое значение и в контекстном меню выберите пункт "Переименовать".
  7. Измените имя на отладчик.
  8. Щелкните правой кнопкой мыши новое строковое значение и в контекстном меню выберите " Изменить". Откроется диалоговое окно " Редактировать строку ".
  9. В поле Значение введите vsjitdebugger.exe.
  10. Нажмите ОК.
  11. В меню реестра нажмите кнопку " Выход".
  12. Каталог, содержащий vsjitdebugger.exe, должен находиться в системном пути. Чтобы добавить его в системный путь, выполните следующие действия:
    а. Откройте панель управления в классическом виде и дважды щелкните значок " Система".
    б. Нажмите Расширенные настройки системы.
    с. В окне " Свойства системы" перейдите на вкладку " Дополнительно ".
    д. На вкладке " Дополнительно " щелкните " Переменные среды".
    е. В диалоговом окне " Переменные среды " в разделе " Системные переменные" выберите " Путь", затем нажмите кнопку " Редактировать".
    е. В диалоговом окне " Редактировать системную переменную " добавьте каталог в поле " Значение переменной". Используйте точку с запятой, чтобы отделить ее от других записей в списке.
    г. Нажмите кнопку ОК, чтобы закрыть диалоговое окно " Редактировать системную переменную ".
    час Нажмите кнопку ОК, чтобы закрыть диалоговое окно " Переменные среды ". я. Нажмите кнопку ОК, чтобы закрыть диалоговое окно " Свойства системы ".
  13. Теперь используйте любой метод для запуска приложения. Visual Studio запустит и загрузит приложение

Ответ 3

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

Я нашел это сегодня - https://blogs.msdn.microsoft.com/visualstudioalm/2014/11/24/introduction-the-child-process-debugging-power-tool/

Это дополнение к визуальной студии, и это работает удовольствие. Когда я отлаживаю приемочный тест (я использую Resharper Test Runner) и помещаю точку останова в приложение, которое запускается, я могу теперь отлаживать приложение в том же экземпляре Visual Studio.

Ответ 4

Другим приятным решением является использование расширения Visual Studio "ReAttach". Здесь можно найти .

Если ваш процесс в настоящий момент не запущен, ReAttach попросит вас запустить его и приложить к нему, как только он станет доступен.

Ответ 5

"Entrian Attach" - это надстройка Visual Studio, которая делает именно это - вы называете ей имя вашего исполняемого файла, и он присоединяется к отладчику при запуске процесса, независимо от того, как он запущен, до запуска какого-либо кода.

(Раскрытие: я автор. Я создал Attach, потому что у меня постоянно есть эта проблема!)

Ответ 6

Как насчет этого: откройте проект для a.exe в VS, установите точки останова и т.д. Затем откройте "Свойства проекта" для вкладки "a.exe", "Отладка" и установите команду "c.exe". Затем просто нажмите "Отладка".

К сожалению, я никогда не делал этого с управляемыми проектами, поэтому я могу быть в стороне. Однако, как я буду делать это с неуправляемыми (С++) проектами. Я думаю, что управляемый отладчик тоже должен его поддерживать.

Ответ 7

Вы также можете использовать утилиту gflags.exe, которая поставляется с инструментами отладки Windows, все, что вам нужно сделать, это открыть gflags.exe, затем перейти к файлу изображения, ввести имя процесса (a.exe), нажать вкладку и установить флажок отладчика, в TextBox введите путь vs с опцией /debugexe (например, "C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe" /debugexe )

Автоматическая визуальная студия откроется после запуска процесса, вы можете добавить свои контрольные точки и нажать "Выполнить".

Ответ 8

Если код С# запускается неуправляемым кодом, убедитесь, что вы отметили "Отладка неуправляемого кода". Свойства проекта → параметры отладки.

Ответ 9

Мне действительно понравилось Entrian Attach, как было предложено @RichieHindle, но я также нашел этот бесплатный инструмент, который делает что-то подобное. Он захватывает все процессы, запущенные процессом отладки.

Порожденный процесс: https://marketplace.visualstudio.com/items?itemName=Brubtsov.SpawnedProcessCatcher

Ответ 10

Начиная с версии VS 2013 SP2, имеется бесплатный инструмент от Microsoft, который делает то же самое, что упоминал ранее "Искаженный процесс Catcher" - привязка всех процессов, которые запускаются процессом, уже находящимся в отладке. Примечание. Я тестировал это только с неуправляемым С++ (это работает безупречно).

Инструмент отладки Microsoft Child Process

Запись в блоге MSDN

Ответ 11

Я разработал расширение VS под названием Remote Debug Tool несколько дней назад. Инструмент удаленной отладки

Это может отладить удаленную машину. В процессе он может автоматически скомпилировать ваш проект, а затем помочь вам присоединиться к процессу. Может быть, расширение может дать вам некоторую ссылку.