Как подключить Visual Studio к процессу, который еще не запущен? - PullRequest
63 голосов
/ 17 ноября 2011

У меня есть программа .NET, которая по некоторым причинам не может быть запущена из Visual Studio (файл Excel создан из шаблона проекта Excel 2010), для которого мне нужно отладить события запуска.

Если я хочу отлаживать события, возникающие после инициализации программы, проблем нет. Я запускаю программу из проводника, присоединяю процесс к Visual Studio и добавляю несколько точек останова в код. Но здесь мне нужно поставить точки останова на события запуска. Мне нужно иметь возможность присоединять процессы к Visual Studio не в зависимости от PID, а от конкретного имени процесса или любого другого решения, которое будет работать.

Конечно, добавление Thread.Sleep(1000) в мои события запуска, чтобы дать мне время для присоединения процесса в Visual Studio, не может быть и речи!

Ответы [ 7 ]

83 голосов
/ 17 ноября 2011

На самом деле вы можете;Вы не привязываетесь к этому, вы начинаете это.В свойствах вашего проекта на вкладке «Отладка» укажите путь к программе, к которой вы хотите присоединиться, в текстовом поле «Команда».

Вы также можете ввести любые аргументы командной строки для программы вПоле «Аргументы команды»:

enter image description here

Убедитесь, что для «Присоединить» установлено значение «Нет».

20 голосов
/ 15 октября 2014

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

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

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

11 голосов
/ 18 июля 2017

Выполните следующие действия, если у вас установлена ​​Visual Studio 2017-2019:

  1. Файл> Открыть> Проект / Решение
  2. Выберите .exe
  3. Отладка> ПускОтладка

Гораздо проще, чем другие предложения: вам не нужно связываться со свойствами проекта, и расширения не нужны.

9 голосов
/ 11 мая 2016

Я нашел этот ответ, когда искал что-то подобное.В моем случае я не мог просто использовать исполняемый файл в качестве программы запуска моего проекта, потому что его нужно было запускать в очень специфической среде, которую я не мог легко воспроизвести (namly: запущен из cygwin).

Iвзглянул на расширение Reattach как , предложенное mrstrange , а также очень похожее расширение Attach To Anything ... но мой исполняемый файл, казалось, закрывался слишком быстро, чтобы расширения могли уведомлять и прикреплять.

Что мне наконец помогло, так это: https://stackoverflow.com/a/4042545/1560865,, который ссылается на статью MSDN Как: автоматически запускать отладчик , который, в свою очередь, перечисляет следующие шаги:

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

Надеюсь, что это поможет кому-нибудь еще в будущем!

3 голосов
/ 17 ноября 2011

Если процесса нет, Visual Studio не может присоединить к нему .

Однако вы можете установить программу запуска вашего проекта как нечто отличное от вывода вашего проекта.

1 голос
/ 03 апреля 2018

Вы можете показать MessageBox, это заблокирует приложение, затем вы присоедините или заново подключите отладчик к процессу и нажмете ОК, чтобы продолжить:

MessageBox.Show("Attach process to debugger and click ok!");

вы можете добавить его в конструктор Form (есливы используете winforms), так что это будет выполнено раньше, кроме инициализации компонентов:

public MainForm()
{
    InitializeComponent();
    MessageBox.Show("Attach process to debugger and click ok!");
}

Когда вы закончите отладку, закомментируйте эту строку.

1 голос
/ 11 марта 2018

Одно маленькое решение, которое может подойти многим людям.

  • в первой строке кода, который будет запускаться exe, добавьте эту команду

    System.Threading.Thread.Sleep (20000)

Это заставит exe спать 20 секунд, прежде чем начнет что-либо обрабатывать. Затем у вас есть 20 секунд, чтобы присоединиться к процессу, что можно быстро выполнить с помощью ctrl + alt + p, затем найдите процесс и введите «присоединить».

Не так много ответов, но я получил удовольствие: -)

...