Як підключити Visual Studio до процесу, який ще не запущений?


89

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

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

Звичайно, про додавання а Thread.Sleep(1000)в мої стартові події, щоб дати мені трохи часу для підключення процесу у Visual Studio, мова не може йти!

Відповіді:


97

Насправді ви можете; ви не прикріплюєтеся до нього, ви починаєте його. У властивостях проекту на вкладці Налагодження в текстовому полі "Команда" вкажіть шлях до програми, до якої потрібно додати.

Ви також можете ввести будь-які аргументи командного рядка для програми у полі "Аргументи команд":

введіть тут опис зображення

Переконайтеся, що для параметра «Вкласти» встановлено значення «Ні».


6
Хороше рішення, але лише зауважте, що натискання клавіші F5 у цьому випадку не працює. Натомість клацніть правою кнопкою миші відповідний проект і натисніть "Налагодження> Почати новий екземпляр" у контекстному меню.
— Герман Кордес,

1
Щоб F5 працював, ваш проект повинен бути початковим проектом у вирішенні. Для цього в досліднику рішень клацніть правою кнопкою миші на проект і виберіть «Встановити як стартовий проект».
— Тібі

1
Також якщо ваша програма має деякі зовнішні залежності, вам також потрібно змінити "Робочий каталог".
— Приянк

Може знадобитися встановити прапорець "Увімкнути налагодження власного коду" (властивості проекту → Налагодження → Увімкнути налагоджувачі ).
— Пітер Мортенсен,

І як це зробити для цілого рішення з 40 проектами?
— Тоні Таннус,

23

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

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

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


Тисячу разів так!
— itlittlejohn

Я отримав глухий кут. Він вимагав авторизації адміністратора при запуску моєї цілі, і після введення pwd та перезапуску проти, Reattach не було. Лише vs без прав адміністратора містить Reattach.
— Ерік

2
Не працює у мене. Він все ще кріпиться занадто пізно, після того, як аварія вже сталася. Здається, перевіряти наявні процеси раз на секунду, що абсолютно безглуздо для цієї програми.
— РІВ

20

Виконайте такі дії, якщо у вас Visual Studio 2017-2019:

  1. Файл> Відкрити> Проект / Рішення
  2. Виберіть .exe
  3. Налагодження> Почати налагодження

Набагато простіше, ніж інші пропозиції: вам не потрібно возитися з властивостями проекту, і ніякі розширення не потрібні.


Але вам доведеться повідомити Visual Studio, де знаходяться символи налагодження, якщо він не знаходить їх автоматично
— Matt Thomas

1
швидко, легко це можна зробити за 5 секунд, мені це подобається. Дякую
— товаришу Joecool

1
Мій exe був запущений, але не вдалося встановити точку зупинки. Що я повинен зробити?
— Ерік

2
@Eric Якщо мій коментар вище не стосується цього питання, я рекомендую поставити це як SO-питання замість коментаря. Ваша проблема стане більш помітною, і ви матимете можливість пояснити свій конкретний сценарій. Тоді повідомте нам, що ви знайшли!
— Matt Thomas

11

Цю відповідь я знайшов, коли шукав щось подібне. У моєму випадку я не міг просто використати виконуваний файл як програму запуску мого проекту, оскільки його потрібно було запустити в дуже специфічному середовищі, яке я не міг легко відтворити (namly: розпочато з cygwin).

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

Нарешті мені допомогло це: https://stackoverflow.com/a/4042545/1560865 , де згадується стаття MSDN How to: Запустити налагоджувач автоматично , де в свою чергу перелічені наступні кроки:

  1. Запустіть редактор реєстру (regedit).
  2. У Редакторі реєстру відкрийте папку HKEY_LOCAL_MACHINE.
  3. Перейдіть до HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows NT \ currentversion \ image варіанти виконання файлу.
  4. У папці Параметри виконання файлу зображень знайдіть назву програми, яку потрібно налагодити, наприклад myapp.exe . Якщо ви не можете знайти програму, яку потрібно налагодити:
    a. Клацніть правою кнопкою миші папку Параметри виконання файлу зображення , а в контекстному меню натисніть Новий ключ .
    b. Клацніть правою кнопкою миші нову клавішу та в контекстному меню натисніть кнопку Перейменувати . c. Відредагуйте назву ключа до назви вашої програми; myapp.exe , у цьому прикладі.
  5. Клацніть правою кнопкою миші папку myapp.exe , а в контекстному меню натисніть Нове значення рядка .
  6. Клацніть правою кнопкою миші нове значення рядка та в контекстному меню натисніть кнопку Перейменувати.
  7. Змініть назву на debugger .
  8. Клацніть правою кнопкою миші нове значення рядка, а в контекстному меню натисніть Змінити . З'явиться діалогове вікно Редагування рядка .
  9. У полі Значення введіть vsjitdebugger.exe.
  10. Клацніть OK .
  11. У меню реєстру натисніть Вийти .
  12. Каталог, що містить vsjitdebugger.exe, повинен бути у вашому системному шляху. Щоб додати його до системного шляху, виконайте такі дії:
    a. Відкрийте Панель управління в класичному поданні та двічі клацніть Система .
    b. Клацніть Додаткові налаштування системи .
    c. У Властивостях системи перейдіть на вкладку Додатково .
    d. На вкладці Додатково натисніть Змінні середовища .
    e. У діалоговому вікні Змінні середовища в розділі Системні змінні виберіть Шлях , а потім натисніть кнопку Редагувати .
    f. У редагуванні змінної системидіалоговому вікні, додайте каталог у поле діалогове вікно системи. Вікно змінної величини . Використовуйте крапку з комою, щоб відокремити її від інших записів у списку.
    g. Натисніть OK, щоб закрити діалогове вікно Редагувати системну змінну .
    h. Натисніть OK, щоб закрити діалогове вікно Змінні середовища .
    i. Натисніть OK, щоб закрити Властивості системи
  13. Тепер використовуйте будь-який метод для запуску програми. Visual Studio запустить і завантажить додаток.

Сподіваюся, що це допоможе комусь іншому в майбутньому!


3
Ось інструкції для цього самого процесу з новішими версіями VS (до 2019 р.): Docs.microsoft.com/en-us/visualstudio/debugger/…
— brichins

3

Якщо немає жодного процесу, Visual Studio не може приєднатись до нього .

Однак ви можете встановити програму запуску вашого проекту як щось інше, ніж результат вашого проекту.


Я вже досліджував, чи те, що я хочу зробити, є правильним, і насправді це так. Моя ситуація не є звичайним випадком налагодження Visual Studio. У мене є проект шаблону Excel 2010, розроблений у Visual Studio, і аркуші шаблонів мають події запуску. Я запускаю цей шаблон із Visual Studio, додаю деякі дані в мої аркуші Excel і зберігаю файл на диску. Тоді єдиний спосіб, яким я можу відкрити цей файл, який також покладається на збірку шаблону, - це відкрити його з провідника, тому я не можу налагодити події запуску в цьому випадку, і, звичайно, я маю деяку обробку даних при запуску, як прив'язка даних.
— Ucodia

Може знадобитися встановити прапорець "Увімкнути налагодження власного коду" (властивості проекту → Налагодження → Увімкнути налагоджувачі ).
— Пітер Мортенсен,

3

Ви можете показати MessageBox, це заблокує програму, потім ви приєднаєте або повторно приєднаєте відладчик до процесу та натисніть кнопку OK, щоб продовжити:

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

ви можете додати його до конструктора форми (якщо ви використовуєте winforms), тому це буде виконано перед будь-чим іншим, крім ініціалізації компонентів:

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

Завершивши налагодження, прокоментуйте цей рядок.


3

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

public static void Main(string[] args)
{
  System.Diagnostics.Debugger.Launch();
}

Але не потрібно видаляти цей рядок перед відправкою вашої заявки. Можливо, ви хочете використовувати прапори компілятора, щоб бути впевненими:

    public static void Main(string[] args)
    {
      #if debug
      System.Diagnostics.Debugger.Launch();
      #endif
    }

2
Це має бути прийнятою відповіддю для всіх випадків, коли ви чекаєте на якийсь зовнішній процес для запуску вашої програми.
— TravelingFox

2

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

  • у перший рядок коду, який буде виконуватися exe, додайте цю команду

    System.Threading.Thread.Sleep (20000)

Це змусить exe спати протягом 20 секунд, перш ніж почати щось обробляти. Потім у вас є 20 секунд, щоб приєднатись до процесу, що можна швидко зробити за допомогою комбінації клавіш ctrl + alt + p, потім знайти процес, а потім увійти, щоб долучити.

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


Мені довелося налагодити CGI, написаний на "С", для якого я мав вихідний код. Я був простим і простим рішенням, щоб встигнути приєднатися до фонового процесу.
— Джоель Гехт,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.