Подтвердить что ты не робот

Как подключить Visual Studio к процессу, который еще не запущен?

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

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

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

4b9b3361

Ответ 1

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

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

enter image description here

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

Ответ 2

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

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

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

Ответ 3

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

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

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

Ответ 4

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

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

В конечном итоге мне помогло следующее: fooobar.com/questions/92630/..., в котором содержится ссылка на статью MSDN Практическое руководство. Автоматический запуск отладчика, который, в свою очередь, перечисляет следующие шаги:

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

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

Ответ 5

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

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

Ответ 6

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

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

    System.Threading.Thread.Sleep(20000)

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

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

Ответ 7

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

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

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

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

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