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


Присоединение к запущенным процессам с помощью отладчика Visual Studio

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

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

Подсказка

Не знаете, следует ли использовать подключение к процессу для сценария отладки? См. распространенные сценарии отладки.

Присоединение к запущенному процессу на локальном компьютере

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

Начиная с Visual Studio 2022 версии 17.10 Preview 2 диалоговое окно "Присоединение к процессу" изменилось. Если вам нужны инструкции, соответствующие более старым диалоговым окнам, перейдите в представление Visual Studio 2019 (селектор версий в верхней левой части статьи).

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

  1. В Visual Studio выберите "Отладить>подключение к процессу " (или нажмите клавиши CTRL+ALT+P), чтобы открыть диалоговое окно "Подключение к процессу ".

  2. Установите тип подключения на локальный.

    В большинстве локальных сценариев отладки можно использовать local. Для некоторых сценариев может потребоваться другой тип подключения. Дополнительные сведения см. в других разделах этой статьи или распространенных сценариях отладки.

    Снимок экрана: диалоговое окно

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

    • Чтобы быстро выбрать процесс, введите его имя или первую букву в поле "Фильтрация процессов ".
    • Если вы не знаете имя процесса, просмотрите список или просмотрите распространенные сценарии отладки для некоторых распространенных имен процессов.
    • Нажмите кнопку "Отслеживать окно ", чтобы включить выбор окна на компьютере, которое задает процесс.

    Подсказка

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

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

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

  5. Выберите Прикрепить.

Подсказка

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

  1. В Visual Studio выберите "Отладить>подключение к процессу " (или нажмите клавиши CTRL+ALT+P), чтобы открыть диалоговое окно "Подключение к процессу ".

  2. Проверьте тип подключения.

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

  3. Задайте целевой объект подключения для имени локального компьютера.

    Снимок экрана: диалоговое окно

  4. В списке доступных процессов найдите и выберите процесс или процессы, к которым вы хотите присоединиться.

    Подсказка

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

  5. В поле «Присоединение к» убедитесь, что указан тип кода, который вы планируете отлаживать. Параметр "Автоматический" по умолчанию работает для большинства типов приложений.

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

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

    1. Щелкните Выбрать.
    2. В диалоговом окне "Выбор типа кода " выберите "Отладка этих типов кода". Если при попытке подключиться к процессу в списке возникает сбой, можно использовать диалоговое окно "Выбор типа кода ", чтобы помочь устранить проблему.
    3. Выберите типы кода, которые требуется выполнить отладку.
    4. Нажмите ОК.
  6. Выберите Прикрепить.

Замечание

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

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

Вы также можете выбрать удаленный компьютер в диалоговом окне "Присоединение к процессу ", просмотреть список доступных процессов, выполняемых на этом компьютере, и подключиться к одному или нескольким процессам для отладки. Удаленный отладчик (msvsmon.exe) должен работать на удаленном компьютере. Дополнительные сведения см. в разделе "Удаленная отладка".

Начиная с Visual Studio 2022 версии 17.10 Preview 2 диалоговое окно "Присоединение к процессу" изменилось. Если вам нужны инструкции, соответствующие более старым диалоговым окнам, перейдите в представление Visual Studio 2019 (селектор версий в верхней левой части статьи).

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

  1. В Visual Studio выберите "Отладить>подключение к процессу " (или нажмите клавиши CTRL+ALT+P), чтобы открыть диалоговое окно "Подключение к процессу ".

  2. Задайте тип подключения для типа удаленного подключения, например Remote (Windows).

    В большинстве сценариев удаленной отладки в Windows можно использовать Remote (Windows). Для некоторых сценариев, таких как отладка Linux или контейнерное приложение, требуется другой тип подключения. Дополнительные сведения см. в других разделах этой статьи или распространенных сценариях отладки.

    Появится параметр целевого объекта подключения .

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

    • Щелкните стрелку раскрывающегося списка рядом с целевым объектом подключения и выберите имя компьютера из раскрывающегося списка.
    • Введите название компьютера в поле "Целевое подключение" и нажмите клавишу ВВОД.
    • Нажмите кнопку "Найти " рядом с целевым полем подключения, чтобы открыть диалоговое окно "Удаленные подключения ". В диалоговом окне "Удаленные подключения" перечислены все устройства, которые находятся в локальной подсети или непосредственно подключены к компьютеру. Для обнаружения удаленных устройств может потребоваться открыть исходящий порт UDP 3702 на сервере. Выберите нужный компьютер или устройство, а затем закройте диалоговое окно.

    Убедитесь, что Visual Studio добавляет необходимый порт к имени компьютера, которое отображается в формате: <имя удаленного компьютера>:порт

    Замечание

    Если вы не можете подключиться с помощью имени удаленного компьютера, попробуйте использовать IP-адрес и порт (например, 123.45.678.9:4026). 4026 — это порт по умолчанию для удаленного отладчика Visual Studio 2022. Сведения о других назначениях портов удаленного отладчика см. в разделе "Назначения портов удаленного отладчика".

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

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

    Подсказка

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

  5. В списке доступных процессов найдите и выберите процесс или процессы, к которым вы хотите присоединиться.

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

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

  7. Выберите Прикрепить.

  1. В Visual Studio выберите "Отладить>подключение к процессу " (или нажмите клавиши CTRL+ALT+P), чтобы открыть диалоговое окно "Подключение к процессу ".

  2. Проверьте тип подключения.

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

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

    • Щелкните стрелку раскрывающегося списка рядом с целевым объектом подключения и выберите имя компьютера из раскрывающегося списка.
    • Введите имя компьютера в поле целевого подключения и нажмите Enter.
    • Нажмите кнопку "Найти " рядом с целевым полем подключения, чтобы открыть диалоговое окно "Удаленные подключения ". В диалоговом окне "Удаленные подключения" перечислены все устройства, которые находятся в локальной подсети или непосредственно подключены к компьютеру. Для обнаружения удаленных устройств может потребоваться открыть исходящий порт UDP 3702 на сервере. Выберите нужный компьютер или устройство, а затем нажмите кнопку "Выбрать".

    Убедитесь, что Visual Studio добавляет необходимый порт к имени компьютера, которое отображается в формате: <имя удаленного компьютера>:порт

    Замечание

    Если вы не можете подключиться с помощью имени удаленного компьютера, попробуйте использовать IP-адрес и порт (например, 123.45.678.9:4022). 4024 — это порт по умолчанию для удаленного отладчика Visual Studio 2019. Сведения о других назначениях портов удаленного отладчика см. в разделе "Назначения портов удаленного отладчика".

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

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

    Подсказка

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

  5. В списке доступных процессов найдите и выберите процесс или процессы, к которым вы хотите присоединиться.

  6. В поле «Присоединение к» убедитесь, что указан тип кода, который вы планируете отлаживать. Параметр "Автоматический" по умолчанию работает для большинства типов приложений.

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

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

    1. Щелкните Выбрать.
    2. В диалоговом окне "Выбор типа кода " выберите "Отладка этих типов кода". Если при попытке подключиться к процессу в списке возникает сбой, можно использовать диалоговое окно "Выбор типа кода ", чтобы помочь устранить проблему.
    3. Нажмите ОК.
  7. Выберите Прикрепить.

Замечание

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

В некоторых случаях при отладке в сеансе удаленного рабочего стола (службы терминалов) список доступных процессов не отображает все доступные процессы. Если вы используете Visual Studio в качестве пользователя с ограниченной учетной записью пользователя, список доступных процессов не будет отображать процессы, выполняемые в сеансе 0. Сеанс 0 используется для служб и других процессов сервера, включая w3wp.exe. Эту проблему можно решить, выполнив Visual Studio под учетной записью администратора или запустив Visual Studio из консоли сервера вместо сеанса удаленного рабочего стола.

Если ни у кого из этих обходных решений нет возможности, третий вариант — присоединиться к процессу, выполнив команду vsjitdebugger.exe -p <ProcessId> Из командной строки Windows. Идентификатор процесса можно определить с помощью tlist.exe. Чтобы получить tlist.exe, скачайте и установите средства отладки для Windows, доступные в скачиваниях WDK и WinDbg.

Присоединение к процессу .NET Core, выполняемого в Службе приложений Azure (Windows)

Если вы публикуете на службу приложений Azure (Windows), смотрите удалённую отладку ASP.NET Core в Azure или отладку службы приложений Azure для получения инструкций.

Присоединение к процессу .NET Core, выполняемого в Службе приложений Azure (Windows)

Если вы публикуете в Службе приложений Azure (Windows), вы найдете параметр "Присоединить отладчик " в меню ... в разделе "Размещение " в профиле публикации. Visual Studio пытается подключить удаленный отладчик к экземпляру Службы приложений Azure (Windows), в который публикуется профиль.

Снимок экрана: параметр

Присоединение к процессу .NET Core, работающему в Linux с помощью SSH

Дополнительные сведения см. в статье Об удаленной отладке .NET Core, работающей в Linux с помощью SSH.

Присоединение к процессу, работающему в контейнере Docker

Начиная с Visual Studio 2019, вы можете подключить отладчик Visual Studio к процессу, работающему в контейнере Docker. Для контейнера Docker .NET Core в Linux см. Присоединение к процессу, выполняемому в контейнере Docker Linux. Сведения о контейнере Docker для Windows см. в разделе "Присоединение к процессу" в контейнере Docker для Windows.

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

Вы можете быстро повторно подключиться к процессам, к которым вы ранее были подключены, выбрав Отладка>Повторно подключиться к процессу (Shift+Alt+P). При выборе этой команды отладчик сразу же попытается подключиться к последним процессам, к которым вы подключились, сначала попытаясь сопоставить идентификатор предыдущего процесса и, если это не удается, сопоставив имя предыдущего процесса. Если совпадения не найдены или если несколько процессов имеют одинаковое имя, откроется диалоговое окно "Присоединение к процессу ", чтобы выбрать правильный процесс.

Замечание

Команда reattach to Process доступна начиная с Visual Studio 2017.

Распространенные сценарии отладки

Чтобы помочь вам определить, стоит ли использовать Attach to Process и к какому процессу подключаться, в следующей таблице показаны несколько распространенных сценариев отладки со ссылками на дополнительные инструкции, где они доступны. (Список не является исчерпывающим.)

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

Для подключения отладчика к коду, написанному на языке C++, код должен генерировать DebuggableAttribute. Это можно добавить в код автоматически, связав его с параметром компоновщика /ASSEMBLYDEBUG .

Для отладки скриптов на стороне клиента в браузере необходимо включить отладку скриптов. Для отладки клиентского скрипта в Chrome выберите JavaScript или TypeScript в качестве типа кода, а в зависимости от типа приложения может потребоваться закрыть все экземпляры Chrome и запустить браузер в режиме отладки (введите chrome.exe --remote-debugging-port=9222 из командной строки).

Для отладки скриптов на стороне клиента в браузере необходимо включить отладку скриптов. Для отладки клиентского скрипта в Chrome выберите JavaScript (Chrome) или JavaScript (Microsoft Edge — Chromium) в качестве типа кода, и в зависимости от типа приложения может потребоваться закрыть все экземпляры Chrome и запустить браузер в режиме отладки (введите chrome.exe --remote-debugging-port=9222 из командной строки). В более ранних версиях Visual Studio отладчик скрипта для Chrome был WebKit.

Scenario Метод отладки Имя процесса Заметки и ссылки
ASP.NET Core — удаленная отладка на сервере служб IIS Использование удаленных средств и присоединение к процессу w3wp.exe или dotnet.exe Начиная с .NET Core 3 процесс w3wp.exe используется для модели размещения приложений по умолчанию. Сведения о развертывании приложений см. в разделе "Публикация в IIS". Дополнительные сведения см. в статье "Удаленная отладка ASP.NET Core" на удаленном компьютере IIS
ASP.NET Core — отладка на локальном компьютере после запуска приложения без отладчика Используйте присоединиться к процессу appname.exe или iisexpress.exe Это может быть полезно для ускорения загрузки приложения, например (например, при профилировании). Процесс локального сервера (kestrel) по умолчанию для ASP.NET Core — appname.exe.
ASP.NET 4 или 4.5 — удаленная отладка на сервере IIS Использование удаленных средств и присоединение к процессу w3wp.exe См. отладку ASP.NET удаленно на удаленном IIS компьютере
Клиентский скрипт— отладка на локальном сервере IIS для поддерживаемых типов приложений Используйте Присоединить к процессу chrome.exe или msedge.exe Отладка скрипта должна быть включена. Для Chrome необходимо также запустить Chrome в режиме отладки (введите chrome.exe --remote-debugging-port=9222 из командной строки) и выбрать JavaScript или TypeScript в поле "Подключение".
Приложение C#, Visual Basic или C++ — отладка на локальном компьютере Использование стандартной отладки (F5) или присоединение к процессу {appname}.exe В большинстве случаев используйте стандартную отладку, а не подключение к процессу.
Настольное приложение Windows — удаленная отладка Удаленные средства N/A См. Удаленная отладка приложения C# или Visual Basic или Удаленная отладка приложения C++
.NET Core в Linux — отладка Используйте Подключиться к процессу dotnet.exe или уникальное имя процесса См. статью Удаленная отладка .NET Core, запущенного на Linux с помощью SSH о том, как использовать SSH. Сведения о контейнерных приложениях см. в разделе "Присоединение к процессу" в контейнере Docker.
Контейнерное приложение — отладка Используйте Прикрепить к процессу dotnet.exe или уникальное имя процесса См . раздел "Присоединение к процессу" в контейнере Docker
Python в Linux — удаленная отладка Используйте присоединиться к процессу debugpy См. также "Удаленное подключение с использованием средств Python"
Другие поддерживаемые типы приложений — отладка на серверном процессе Если сервер является удаленным, используйте удаленные средства и подключитесь к процессу chrome.exe, msedge.exeили другие процессы При необходимости используйте монитор ресурсов для идентификации процесса. См. раздел "Удаленная отладка".
Приложение универсальной платформы Windows (UWP), OneCore, HoloLens или приложение Интернета вещей — удаленная отладка Отладка установленного пакета приложения N/A См . раздел "Отладка установленного пакета приложения " вместо использования подключения к процессу
Приложение UWP, OneCore, HoloLens или IoT — отладка приложения, которое вы не начали с Visual Studio Отладка установленного пакета приложения N/A См . раздел "Отладка установленного пакета приложения " вместо использования подключения к процессу

Использование функций отладчика

Чтобы использовать все функции отладчика Visual Studio, такие как установка точек останова при подключении к процессу, приложение должно идеально соответствовать вашему местному источнику и символам. То есть отладчик должен иметь возможность загружать правильные файлы символов (PDB). По умолчанию для этого требуется отладочная сборка.

Для сценариев удаленной отладки необходимо иметь исходный код (или копию исходного кода), который уже открыт в Visual Studio. Скомпилированные двоичные файлы приложений на удаленном компьютере должны поступать из той же сборки, что и на локальном компьютере.

В некоторых локальных сценариях отладки можно выполнять отладку в Visual Studio без доступа к источнику, если в приложении присутствуют правильные файлы символов. По умолчанию для этого требуется отладочная сборка. Для получения дополнительной информации см. раздел «Указания по файлам символов и источников».

Устранение ошибок при прикреплении

В некоторых сценариях отладчику может потребоваться помощь, чтобы правильно определить тип кода для отладки. Если значения подключения заданы правильно (можно просмотреть правильный процесс в списке доступных процессов ), но отладчик не может присоединиться, попробуйте выбрать наиболее подходящий отладчик в списке типов кода , который может потребоваться, например, при отладке приложения Linux или Python.

В некоторых сценариях отладчику может понадобиться помощь для правильного определения типа кода для отладки. Если значения подключения заданы правильно (можно просмотреть правильный процесс в списке доступных процессов ), но отладчик не может присоединиться, попробуйте выбрать наиболее подходящий тип подключения в списке типов подключения , которые могут потребоваться, например, при отладке приложения Linux или Python. Если вы используете тип подключения по умолчанию, можно также выбрать конкретный тип кода для подключения, как описано далее в этом разделе.

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

Иногда отладчик может успешно подключиться к одному типу кода, но не к другому типу кода. Как правило, это происходит в следующих случаях:

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

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

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

Если требуется более конкретная информация о том, почему отладчик не удалось подключиться к типу кода, попробуйте повторно подключиться только к этому типу кода.

Получить конкретные сведения о том, почему не удалось подключить тип кода

  1. Отсоединитесь от процесса. В меню Отладки выберите «Отсоединить все».

  2. Повторно присоединитесь к процессу, выбрав только тип кода, который не удалось прикрепить.

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

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

    3. В диалоговом окне "Присоединение к процессу" нажмите кнопку "Присоединить".

    На этот раз подключение завершится сбоем, и вы получите определенное сообщение об ошибке.

  1. Отключитесь от процесса. В меню Отладки выберите Отсоединить все.

  2. Повторно подключитесь к процессу, выбрав только тип кода, который не удалось подключить.

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

    2. Выберите Выбрать.

    3. В диалоговом окне "Выбор типа кода " выберите "Отладка этих типов кода " и тип кода, который не удалось подключить. Отмените выбор других типов кода.

    4. Нажмите ОК.

    5. В диалоговом окне "Присоединение к процессу" нажмите кнопку "Присоединить".

    На этот раз подключение завершится сбоем, и вы получите определенное сообщение об ошибке.