У меня есть программа .NET, которая по некоторым причинам не может быть запущена из Visual Studio (файл Excel, созданный из проекта шаблона Excel 2010), для которой мне нужно отлаживать события запуска.
Если я хочу отлаживать события, происходящие после инициализации программы, проблем нет. Я запускаю программу из проводника, присоединяю процесс к Visual Studio и добавляю в код несколько точек останова. Но здесь мне нужно поставить точки останова на события запуска. Мне нужно иметь возможность присоединять процессы к Visual Studio, не в зависимости от PID, а от имени конкретного процесса или любого другого решения, которое будет работать.
Конечно, о добавлении Thread.Sleep(1000)
в мои события запуска, чтобы дать мне время присоединить процесс в Visual Studio, не может быть и речи!
источник
Я отлаживал плагин C ++ во внешнем порожденном процессе, который разбился из-за выдачи исключения при запуске, и это отлично сработало для меня:
Добавьте бесплатное расширение Reattach Extension для Visual Studio . Попросите его повторно присоединиться к имени процесса перед его запуском. Появится модальное диалоговое окно, в котором говорится, что он ожидает запуска процесса по имени.
Теперь запустите процесс, и отладчик Visual Studio немедленно подключится, улавливая исключения и достигая точек останова.
источник
Если у вас Visual Studio 2017-2019, выполните следующие действия:
Намного проще, чем другие предложения: вам не нужно возиться со свойствами проекта и никаких расширений не требуется.
источник
Я нашел этот ответ, когда искал нечто подобное. В моем случае я не мог просто использовать исполняемый файл в качестве программы запуска моего проекта, потому что его нужно было запускать в очень специфической среде, которую я не мог легко воспроизвести (а именно: запущен из cygwin).
Я взглянул на расширение Reattach Extension, предложенное mrstrange, а также на очень похожее расширение Attach To Anything ... но мой исполняемый файл, похоже, закрывался слишком быстро, чтобы расширения могли уведомить и прикрепить.
В конечном итоге мне помогло следующее: https://stackoverflow.com/a/4042545/1560865 , который ссылается на статью MSDN Как: запустить отладчик автоматически , в которой, в свою очередь, перечислены следующие шаги:
a. Щелкните правой кнопкой мыши папку « Параметры выполнения файла изображения » и в контекстном меню выберите « Новый ключ» .
б. Щелкните новый ключ правой кнопкой мыши и в контекстном меню выберите команду « Переименовать» . c. Измените имя ключа на имя вашего приложения; myapp.exe , в этом примере.
debugger
.vsjitdebugger.exe
.a. Откройте панель управления в классическом виде и дважды щелкните « Система» .
б. Щелкните Advanced System Settings .
c. В свойствах системы перейдите на вкладку « Дополнительно ».
d. На вкладке « Дополнительно » щелкните « Переменные среды» .
е. В диалоговом окне « Переменные среды » в разделе « Системные переменные» выберите « Путь» и нажмите кнопку « Изменить» .
f. В редактируемой системной переменнойдиалоговом окне, добавьте каталог в поле значения переменной . Используйте точку с запятой, чтобы отделить его от других записей в списке.
грамм. Щелкните OK, чтобы закрыть диалоговое окно Edit System Variable .
час Нажмите ОК, чтобы закрыть диалоговое окно « Переменные среды ».
я. Нажмите ОК, чтобы закрыть диалоговое окно Свойства системы .
Надеюсь, что это поможет кому-нибудь еще в будущем!
источник
Если процесса нет, Visual Studio не сможет к нему подключиться .
Тем не менее, вы можете установить программу запуска вашего проекта, отличную от вывода вашего проекта.
источник
Вы можете показать MessageBox, это заблокирует приложение, затем вы присоединяете или повторно подключаете отладчик к процессу и нажимаете ОК, чтобы продолжить:
вы можете добавить его в конструктор формы (если вы используете winforms), чтобы он выполнялся раньше всего, кроме инициализации компонентов:
Когда вы закончите отладку, закомментируйте эту строку.
источник
Вы можете запустить отладчик из своего кода через
Но не убирайте эту строку перед отправкой вашего приложения. Может быть, вы хотите использовать флаги компилятора, чтобы быть уверенным:
источник
Одно маленькое решение, которое может подойти многим.
в первой строке кода, который будет запускать exe, добавьте эту команду
System.Threading.Thread.Sleep (20000)
Это заставит exe спать на 20 секунд, прежде чем он начнет что-либо обрабатывать. Затем у вас есть 20 секунд, чтобы присоединиться к процессу, что можно быстро сделать с помощью ctrl + alt + p, затем найдите процесс, затем введите, чтобы присоединиться.
Не так много ответа, но мне понравилось: -)
источник