Поделиться через


Отладка нескольких процессов (C#, Visual Basic, C++)

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

Запуск отладки с несколькими процессами

Если несколько проектов в решении Visual Studio могут выполняться независимо, можно выбрать, какой проект запускает отладчик. Текущий проект запуска отображается полужирным шрифтом в обозревателе решений.

Чтобы изменить проект запуска, в обозревателе решений щелкните правой кнопкой мыши другой проект и выберите "Задать в качестве проекта запуска".

Чтобы начать отладку проекта из обозревателя решений без его запуска, щелкните проект правой кнопкой мыши и выберите ">Начать отладкунового экземпляра" или "Шаг" в новый экземпляр.

Чтобы задать запускаемый проект или несколько проектов из свойств решения:

  1. Выберите решение в обозревателе решений , а затем щелкните значок "Свойства " на панели инструментов или щелкните его правой кнопкой мыши и выберите "Свойства".

  2. На странице "Свойства" выберите "Общие свойства>запуска проекта".

    Изменение типа запуска для проекта

  3. Выберите текущий выбор, отдельный проект запуска и файл проекта или несколько запускаемых проектов.

    При выборе множества проектов запуска можно изменить порядок запуска и действие для каждого проекта: Запустить, Запустить без отладки или Нет действий.

  4. Нажмите кнопку "Применить" или "ОК ", чтобы применить и закрыть диалоговое окно.

Присоединение к процессу

Отладчик также может подключаться к приложениям, выполняемым в процессах за пределами Visual Studio, в том числе на удаленных устройствах. После присоединения к приложению можно использовать отладчик Visual Studio. Функции отладки могут быть ограничены. Это зависит от того, создано ли приложение с помощью сведений об отладке, есть ли у вас доступ к исходному коду приложения, а также от того, отслеживает ли компилятор JIT отладочную информацию.

Дополнительные сведения см. в разделе "Подключение к выполняемым процессам".

Чтобы подключиться к запущенным процессам, выполните приведенные действия.

  1. При работе приложения выберите Отладка>Подключиться к процессу.

    Диалоговое окно

  2. В диалоговом окне "Присоединение к процессу" выберите процесс из списка доступных процессов и нажмите кнопку "Присоединить".

Замечание

Отладчик не автоматически присоединяется к дочернему процессу, запущенному отладчиком, даже если дочерний проект находится в том же решении. Чтобы выполнить отладку дочернего процесса, подключитесь к дочернему процессу после его запуска или настройте редактор реестра Windows, чтобы запустить дочерний процесс в новом экземпляре отладчика.

Использование редактора реестра для автоматического запуска процесса в отладчике

Иногда может потребоваться отладка кода запуска для приложения, запускаемого другим процессом. Примеры включают службы и настраиваемые действия установки. Вы можете запустить отладчик и автоматически подключиться к приложению.

  1. Запустите редактор реестра Windows, выполнив regedit.exe.

  2. В редакторе реестра перейдите к HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options.

  3. Выберите папку приложения, которое нужно запустить в отладчике.

    Если приложение не указано в качестве дочерней папки, щелкните правой кнопкой мыши параметры выполнения файла изображения, выберите новый>ключ и введите имя приложения. Или щелкните правой кнопкой мыши новый ключ в дереве, выберите "Переименовать" и введите имя приложения.

  4. Щелкните правой кнопкой мыши новый ключ в дереве и выберите "Создать>строковое значение".

  5. Измените имя нового значения с нового значения #1 на debugger.

  6. Щелкните отладчик правой кнопкой мыши и выберите "Изменить".

    Диалоговое окно изменения строки

  7. В диалоговом окне "Изменить строку " введите vsjitdebugger.exe поле "Значение" и нажмите кнопку "ОК".

    Автоматическая запись старта отладчика в regedit.exe

Отладка нескольких процессов

При отладке приложения, состоящего из нескольких процессов, команды прерывания, пошагового выполнения и продолжения отладчика по умолчанию влияют на все процессы. Например, если процесс приостановлен в точке останова, выполнение всех остальных процессов также приостановлено. Это поведение по умолчанию можно изменить, чтобы получить больше контроля над целевыми объектами команд выполнения.

Чтобы изменить, будут ли приостановлены все процессы при завершении одного из них:

  1. В области параметровинструментов (или >) разверните раздел "Все параметры отладки>>общего".
  1. В диалоговом окне"Средства" (или ">") разверните раздел"Общие сведения > отладке".
  1. Установите или снимите флажок Разорвать все процессы при разрыве одного процесса.

Команды прерывания, шага, продолжения

В следующей таблице описано поведение команд отладки при выборе или отмене выбора опции Остановить все процессы при остановке одного из них.

Command Выбрано Отменен
Отладка>Остановить все Все процессы выходят из строя. Все процессы выходят из строя.
Отлаживать>Продолжать Все процессы возобновляются. Все приостановленные процессы возобновляются.
Отладка>Шаг внутрь, Шаг через или Шаг из Все процессы выполняются параллельно с текущими шагами процесса.
Затем все процессы прерываются.
Текущие шаги процесса.
Приостановленные процессы возобновляются.
Выполнение процессов продолжается.
Отладка>Шагнуть в текущий процесс, Шагнуть через текущий процесс или Шагнуть из текущего процесса N/A Текущие шаги процесса.
Другие процессы поддерживают существующее состояние (приостановлено или запущено).
Точка останова исходного окна Все процессы выходят из строя. Только разрывы процесса исходного окна.
Исходное окно "Запуск на курсор"
Исходное окно должно находиться в текущем процессе.
Все процессы выполняются до тех пор, пока исходный процесс окна не дойдет до курсора, а затем прерываются.
Затем все остальные процессы прерываются.
Процесс исходного окна выполняется на курсор.
Другие процессы поддерживают существующее состояние (приостановлено или запущено).
Процессы окно >Остановить процесс N/A Выбранные перебои в процессе.
Другие процессы поддерживают существующее состояние (приостановлено или запущено).
Окно процессов>Продолжить процесс N/A Выбранный процесс возобновляется.
Другие процессы поддерживают существующее состояние (приостановлено или запущено).

Найдите исходные и символьные файлы (.pdb)

Чтобы перейти к исходному коду процесса, отладчику требуется доступ к исходным файлам и файлам символов. Дополнительные сведения см. в разделе Указание символов (.pdb) и исходных файлов.

Если вы не можете получить доступ к файлам процесса, вы можете перемещаться с помощью окна дизассемблирования. Дополнительные сведения см. в разделе "Практическое руководство. Использование окна дизассембли".

Переключение между процессами

Вы можете подключиться к нескольким процессам при отладке, но только один процесс активен в отладчике в любое время. Можно задать активный или текущий процесс на панели инструментов "Расположение отладки " или в окне "Процессы ". Для переключения между процессами оба процесса должны находиться в режиме останова.

Чтобы задать текущий процесс на панели инструментов "Расположение отладки", выполните следующие действия.

  1. Чтобы открыть панель инструментов "Расположение отладки", выберите "Просмотреть>панели инструментов отладки>".

  2. Во время отладки на панели инструментов "Расположение отладки " выберите процесс, который необходимо задать в качестве текущего процесса в раскрывающемся списке "Процесс ".

    Переключение между процессами

Чтобы задать текущий процесс из окна "Процессы", выполните следующие действия.

  1. Чтобы открыть окно "Процессы" во время отладки, выберите "Отладка>процессов>".

  2. В окне "Процессы " текущий процесс помечается желтой стрелкой. Дважды щелкните процесс, который нужно задать в качестве текущего процесса.

    Окно процессов DBG_ProcessesWindow

Переключение на процесс задает его в качестве текущего процесса в целях отладки. Окна отладчика показывают состояние текущего процесса и команды пошагового выполнения влияют только на текущий процесс.

Остановка отладки с помощью нескольких процессов

По умолчанию, при выборе Отладка>Остановить отладку, отладчик завершается или отсоединяется от всех процессов.

  • Если текущий процесс был запущен в отладчике, процесс завершается.

  • Если вы подключили отладчик к текущему процессу, отладчик отсоединяется от процесса и оставляет процесс запущенным.

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

Чтобы управлять тем, как остановка отладки влияет на отдельный процесс, в окне "Процессы " щелкните правой кнопкой мыши процесс, а затем установите или снимите флажок "Отсоединить" при остановке отладки .

Замечание

Опция отладчика "Прерывать все процессы, если ломается один" не влияет на остановку, завершение или отключение от процессов.

Остановить, завершить и отсоединить команды

В следующей таблице описано поведение отладчика остановки, завершения и отсоединения команд с несколькими процессами:

Command Описание
Отлаживать>Остановка отладки Если поведение не изменяется в окне "Процессы ", процессы, запущенные отладчиком, завершаются, а присоединенные процессы отсоединяются.
Отладка>Завершить все Все процессы завершены.
Отладка>Отключить все Отладчик отсоединяется от всех процессов.
Окно процессов>Отсоединить процесс Отладчик отсоединяется от выбранного процесса.
Другие процессы поддерживают существующее состояние (приостановлено или запущено).
Окно 'Процессы'>Завершить процесс Выбранный процесс завершается.
Другие процессы поддерживают существующее состояние (приостановлено или запущено).
Отсоединение окна > процессов при остановке отладки При выборе Прекратить отладку>система отсоединяется от выбранного процесса.
Если не выбрано, Отладка>Остановить отладку завершает выбранный процесс.