Visual Studio: автоматическое подключение к процессу при его порождении - PullRequest
63 голосов
/ 23 декабря 2009

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

Ответы [ 10 ]

65 голосов
/ 23 декабря 2009

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

26 голосов
/ 28 октября 2010

См. Статью 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. Щелкните правой кнопкой мыши новое строковое значение и в контекстном меню выберите Изменить . Откроется диалоговое окно Edit String .
  9. В поле Значение введите vsjitdebugger.exe .
  10. Нажмите OK .
  11. В меню Реестр нажмите Выход .
  12. Каталог, содержащий vsjitdebugger.exe, должен находиться в системном пути. Чтобы добавить его в системный путь, выполните следующие действия:
    а. Откройте панель управления в классическом режиме и дважды щелкните System .
    . б. Нажмите Дополнительные параметры системы .
    с. В Свойства системы перейдите на вкладку Дополнительно .
    д. На вкладке Advanced нажмите Переменные среды .
    е. В диалоговом окне Переменные среды в разделе Системные переменные выберите Путь , затем нажмите кнопку Редактировать .
    е. В диалоговом окне Изменить системную переменную добавьте каталог в поле Значение переменной . Используйте точку с запятой, чтобы отделить ее от другие записи в списке.
    г. Нажмите OK , чтобы закрыть диалоговое окно Изменить системную переменную .
    час Нажмите OK , чтобы закрыть диалоговое окно Переменные среды . я. Нажмите OK , чтобы закрыть диалоговое окно Свойства системы .
  13. Теперь используйте любой метод для запуска приложения. Visual Studio запустит и загрузит приложение
8 голосов
/ 24 марта 2016

Еще одним приятным решением является использование расширения Visual Studio «ReAttach». Можно найти здесь .

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

8 голосов
/ 16 марта 2016

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

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

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

5 голосов
/ 07 октября 2013

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

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

3 голосов
/ 27 сентября 2011

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

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

3 голосов
/ 23 декабря 2009

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

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

0 голосов
/ 08 ноября 2017

Начиная с VS 2013 с пакетом обновления 2 (SP2), существует бесплатный инструмент от Microsoft, который делает то же самое, что и упомянутый выше «Spawned Process Catcher», - присоединяет все процессы, которые запускаются процессом, уже находящимся в процессе отладки. Примечание: я проверял это только с неуправляемым C ++ (это работает безупречно).

Инструмент для отладки дочерних процессов Microsoft

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

0 голосов
/ 04 апреля 2017

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

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

0 голосов
/ 23 декабря 2009

Если код C # запускается неуправляемым кодом, убедитесь, что вы отметили «Отладка неуправляемого кода» @ Свойства проекта -> параметры отладки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...