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



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

1322   10  

10 ответов:

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

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

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

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

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

Это дополнение к visual studio, и он работает удовольствие. Когда я отлаживаю приемочный тест (я использую ReSharper test runner) и помещаю точку останова в приложение, которое запускается, теперь я могу отлаживать приложение в том же экземпляре visual studio.

еще одно хорошее решение-использовать расширение Visual Studio "ReAttach". Можно найти здесь.

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

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

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

Как насчет этого: откройте проект a.exe в VS установите точки останова и т. д. Тогда откройте Свойства Проекта для a.exe, отладка tab и set команда до c.exe. Тогда просто нажмите Debug.

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

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

автоматически visual studio откроется после запуска процесса вы можете добавить свои точки останова и нажать Бежать.

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

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

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

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

Microsoft Child Process Debugging Power Tool

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

Comments

    Ничего не найдено.