Visual Studio 디버거에서 실행 중인 프로세스에 연결

로컬 또는 원격 컴퓨터에서 실행 중인 프로세스에 Visual Studio 디버거를 연결할 수 있습니다. 프로세스가 실행된 후 디버그>프로세스에 연결을 선택하거나 Visual Studio에서 Ctrl+Alt+p를 누르고, 프로세스에 연결 대화 상자를 사용하여 프로세스에 디버거를 연결합니다.

프로세스에 연결을 사용하여 로컬 또는 원격 컴퓨터에서 실행 중인 앱을 디버그하거나, 여러 프로세스를 동시에 디버그하거나, Visual Studio에서 생성되지 않은 앱을 디버그하거나, 디버거가 연결된 Visual Studio에서 시작하지 않은 앱을 디버그할 수 있습니다. 예를 들어 디버거를 사용하지 않고 앱을 실행해 예외가 발생하는 경우 앱을 실행하는 프로세스에 디버거를 연결하고 디버깅을 시작할 수 있습니다.

디버깅 시나리오에 프로세스에 연결을 사용하고 있는지 확실하지 않은 경우 일반적인 디버깅 시나리오를 참조하세요.

로컬 컴퓨터에서 실행 중인 프로세스에 연결

이전에 연결한 프로세스에 빠르게 다시 연결하려면 프로세스에 다시 연결을 참조하세요.

로컬 컴퓨터의 프로세스에 연결하려면

  1. Visual Studio에서 디버그>프로세스에 연결(또는 Ctrl+Alt+P)을 선택하여 프로세스에 연결 대화 상자를 엽니다.

  2. 연결 형식을 확인합니다.

    대부분의 시나리오에서는 기본값을 사용할 수 있습니다. 일부 시나리오에는 다른 연결 형식이 필요할 수 있습니다. 자세한 내용은 이 문서의 다른 섹션 또는 일반적인 디버깅 시나리오를 참조하세요.

  3. 연결 대상을 로컬 컴퓨터 이름으로 설정합니다.

    연결 대상이 로컬 머신 이름으로 설정된 프로세스에 연결 대화 상자의 스크린샷

    연결 대상이 로컬 머신 이름으로 설정된 프로세스에 연결 대화 상자의 스크린샷

  4. 사용 가능한 프로세스 목록에서 연결하려는 프로세스를 찾아 선택합니다.

    • 프로세스를 신속하게 선택하려면 프로세스 필터링 상자에 해당 이름 또는 첫 글자를 입력합니다.

    • 프로세스 이름을 모르는 경우 목록을 탐색하거나 일반적인 프로세스 이름에 대한 일반적인 디버깅 시나리오를 참조하세요.

    프로세스에 연결 대화 상자가 열려 있는 동안 배경에서 프로세스를 시작하고 중지할 수 있으므로 실행 중인 프로세스의 목록이 항상 최신 상태인 것은 아닙니다. 언제든지 새로 고침을 선택하여 현재 목록을 볼 수 있습니다.

  5. 연결 대상 필드에서 디버그할 코드 형식이 표시되어 있는지 확인합니다. 기본 자동 설정은 대부분의 앱 유형에서 작동합니다.

    기본값 연결 형식을 사용하는 경우 연결하려는 코드 형식을 수동으로 선택할 수 있습니다. 그렇지 않으면 선택 옵션이 사용 중지될 수 있습니다.

    수동으로 코드 형식을 선택하려면

    1. 선택을 클릭합니다.
    2. 코드 형식 선택 대화 상자의 다음 코드 형식 디버그를 선택합니다. 목록의 프로세스에 연결하려고 할 때 오류가 발생하는 경우 코드 형식 선택 대화 상자를 사용하여 문제를 해결할 수 있습니다.
    3. 디버그할 코드 형식을 선택합니다.
    4. 확인을 선택합니다.
  6. 첨부를 선택합니다.

동일한 프로세스가 여러 개 있는 시나리오에서는 명령줄 열 또는 제목 열의 w3wp 프로세스 세부 정보를 사용하여 올바른 프로세스를 식별합니다.

참고

디버깅을 위해 여러 앱에 연결할 수 있지만 한 번에 하나의 앱만 디버거에서 활성화됩니다. Visual Studio 디버그 위치 도구 모음 또는 프로세스 창에서 활성 앱을 설정할 수 있습니다.

원격 컴퓨터의 프로세스에 연결

또한 프로세스에 연결 대화 상자에서 원격 컴퓨터를 선택하고 해당 컴퓨터에서 실행되는 사용 가능한 프로세스 목록을 확인하여 디버깅을 위해 하나 이상의 프로세스에 연결할 수 있습니다. 원격 디버거(msvsmon.exe)가 원격 컴퓨터에서 실행되고 있어야 합니다. 자세한 내용은 원격 디버깅을 참조하세요.

IIS에 배포된 ASP.NET 애플리케이션을 디버그하는 방법에 대한 자세한 지침은 원격 IIS 컴퓨터의 ASP.NET 원격 디버그를 참조하세요.

원격 컴퓨터에서 실행 중인 프로세스에 연결하려면

  1. Visual Studio에서 디버그>프로세스에 연결(또는 Ctrl+Alt+P)을 선택하여 프로세스에 연결 대화 상자를 엽니다.

  2. 연결 형식을 확인합니다.

    대부분의 시나리오에서는 기본값을 사용할 수 있습니다. Linux 또는 컨테이너화된 앱 디버깅과 같은 일부 시나리오에는 다른 연결 형식이 필요합니다. 자세한 내용은 이 문서의 다른 섹션 또는 일반적인 디버깅 시나리오를 참조하세요.

  3. 연결 대상 상자에서 다음 방법 중 하나를 사용하여 원격 컴퓨터를 선택합니다.

    • 연결 대상 옆에 있는 드롭다운 화살표를 선택하고 드롭다운 목록에서 컴퓨터 이름을 선택합니다.

    • 연결 대상 상자에 컴퓨터 이름을 입력하고 Enter 키를 누릅니다.

      Visual Studio에서 <원격 컴퓨터 이름>:포트 형식으로 표시되는 컴퓨터 이름에 필요한 포트를 추가하는지 확인합니다.

      참고

      원격 컴퓨터 이름을 사용하여 연결할 수 없는 경우 IP 및 포트 주소를 사용해 보세요(예: 123.45.678.9:4022). 4026은 Visual Studio 2022 원격 디버거의 기본 포트입니다. 다른 원격 디버거 포트 할당은 원격 디버거 포트 할당을 참조하세요.

      참고

      원격 컴퓨터 이름을 사용하여 연결할 수 없는 경우 IP 및 포트 주소를 사용해 보세요(예: 123.45.678.9:4022). 4024는 Visual Studio 2019 원격 디버거의 기본 포트입니다. 다른 원격 디버거 포트 할당은 원격 디버거 포트 할당을 참조하세요.

    • 연결 대상 상자 옆에 있는 찾기 단추를 선택하여 원격 연결 대화 상자를 엽니다. 원격 연결 대화 상자에는 로컬 서브넷에 있거나 컴퓨터에 직접 연결된 모든 디바이스가 나열되어 있습니다. 원격 디바이스를 검색하려면 서버에서 UDP 포트 3702를 열어야 할 수 있습니다. 원하는 컴퓨터 또는 디바이스를 선택한 다음 선택을 클릭합니다.

    참고

    연결 형식 설정은 디버깅 세션 간에 유지됩니다. 연결 대상 설정은 해당 대상을 사용하여 디버깅 연결에 성공한 경우에만 디버깅 세션 간에 유지됩니다.

  4. 새로 고침을 클릭하여 사용 가능한 프로세스 목록을 채웁니다.

    프로세스에 연결 대화 상자가 열려 있는 동안 배경에서 프로세스를 시작하고 중지할 수 있으므로 실행 중인 프로세스의 목록이 항상 최신 상태인 것은 아닙니다. 언제든지 새로 고침을 선택하여 현재 목록을 볼 수 있습니다.

  5. 사용 가능한 프로세스 목록에서 연결하려는 프로세스를 찾아 선택합니다.

  6. 연결 대상 필드에서 디버그할 코드 형식이 표시되어 있는지 확인합니다. 기본 자동 설정은 대부분의 앱 유형에서 작동합니다.

    기본값 연결 형식을 사용하는 경우 연결하려는 코드 형식을 수동으로 선택할 수 있습니다. 그렇지 않으면 선택 옵션이 사용 중지될 수 있습니다.

    수동으로 코드 형식을 선택하려면

    1. 선택을 클릭합니다.
    2. 코드 형식 선택 대화 상자의 다음 코드 형식 디버그를 선택합니다. 목록의 프로세스에 연결하려고 할 때 오류가 발생하는 경우 코드 형식 선택 대화 상자를 사용하여 문제를 해결할 수 있습니다.
    3. 확인을 선택합니다.
  7. 첨부를 선택합니다.

참고

디버깅을 위해 여러 앱에 연결할 수 있지만 한 번에 하나의 앱만 디버거에서 활성화됩니다. Visual Studio 디버그 위치 도구 모음 또는 프로세스 창에서 활성 앱을 설정할 수 있습니다.

원격 데스크톱(터미널 서비스) 세션에서 디버그할 때 사용 가능한 프로세스 목록에 사용 가능한 프로세스 중 일부가 표시되지 않는 경우가 있습니다. 제한된 사용자 계정으로 Visual Studio를 실행하는 경우 세션 0에서 실행 중인 프로세스는 사용 가능한 프로세스 목록에 표시되지 않습니다. 세션 0은 w3wp.exe를 비롯한 서비스 및 기타 서버 프로세스에 사용됩니다. 관리자 계정으로 Visual Studio를 실행하거나 터미널 서비스 세션 대신 서버 콘솔에서 Visual Studio를 실행하여 이 문제를 해결할 수 있습니다.

이러한 해결 방법을 둘 다 사용할 수 없는 경우 세 번째 방법으로 Windows 명령줄에서 vsjitdebugger.exe -p <ProcessId>를 실행하여 프로세스에 연결합니다. 프로세스 ID는 tlist.exe를 사용하여 확인할 수 있습니다. tlist.exe를 얻으려면 WDK 및 WinDbg 다운로드에서 Debugging Tools for Windows를 다운로드하여 설치합니다.

Azure App Service(Windows)에서 실행되는 .NET Core 프로세스에 연결

Azure App Service(Windows)에 게시하는 경우 Azure의 ASP.NET Core 원격 디버그 또는 Azure App Service 디버깅을 참조하세요.

Azure App Service(Windows)에서 실행되는 .NET Core 프로세스에 연결

Azure App Service(Windows)에 게시하는 경우, 게시 프로필 내 호스트 아래의 ... 메뉴에서 디버거 연결 옵션을 찾을 수 있습니다. Visual Studio는 프로필이 게시되는 Azure App Service(Windows) 인스턴스에 원격 디버거를 연결하려고 시도합니다.

게시 요약 페이지의 디버거 연결 옵션 스크린샷.

SSH를 사용하여 Linux에서 실행되는 .NET Core 프로세스에 연결

자세한 내용은 SSH를 사용하여 Linux에서 실행되는 .NET Core 원격 디버그를 참조하세요.

Docker 컨테이너에서 실행되는 프로세스에 연결

Visual Studio 2019부터 Docker 컨테이너에서 실행되는 프로세스에 Visual Studio 디버거를 연결할 수 있습니다. Linux .NET Core Docker 컨테이너의 경우에는 Linux Docker 컨테이너에서 실행되는 프로세스에 연결을 참조하세요. Windows Docker 컨테이너의 경우에는 Windows Docker 컨테이너에서 실행되는 프로세스에 연결을 참조하세요.

프로세스에 다시 연결

디버그>프로세스에 다시 연결(Shift+Alt+P)를 선택하여 이전에 연결한 프로세스에 신속하게 다시 연결할 수 있습니다. 이 명령을 선택하는 경우 디버거는 즉시 먼저 이전 프로세스 ID와 일치하는 항목을 검색하고 이것이 실패하면 이전 프로세스 이름과 일치하는 항목을 검색하여 사용자가 연결한 마지막 프로세스에 연결을 시도합니다. 일치하는 항목이 없거나 여러 프로세스가 동일한 이름인 경우 사용자가 올바른 프로세스를 선택할 수 있도록 프로세스에 연결 대화 상자가 열립니다.

참고

프로세스에 다시 연결 명령은 Visual Studio 2017부터 사용할 수 있습니다.

일반적인 디버깅 시나리오

프로세스에 연결 사용 여부와 어느 프로세스를 연결할지 결정하는 데 도움이 되도록 다음 표에서는 몇 가지 일반적인 디버깅 시나리오를 추가 지침 링크(사용 가능한 경우)와 함께 제시합니다. (이 목록은 전체 목록이 아닙니다.)

UWP(유니버설 Windows 플랫폼) 앱과 같은 일부 앱 유형에서는 프로세스 이름에 직접 연결하는 대신 Visual Studio의 설치된 앱 패키지 디버그 메뉴 옵션을 사용합니다(표 참조).

디버거에서 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용 스크립트 디버거가 웹 키트였습니다.

연결하려는 실행 중 프로세스를 신속하게 선택하려면 Visual Studio에서 Ctrl+Alt+P를 입력한 다음 프로세스 이름의 첫 글자를 입력합니다.

시나리오 디버그 방법 프로세스 이름 참고 사항 및 링크
ASP.NET Core - IIS 서버의 원격 디버그 원격 도구 및 프로세스에 연결 사용 w3wp.exe 또는 dotnet.exe .NET Core 3부터 w3wp.exe 프로세스가 기본 앱 내 호스팅 모델에 사용됩니다. 앱 배포의 경우 IIS에 게시를 참조하세요. 자세한 내용은 원격 IIS 컴퓨터의 ASP.NET Core 원격 디버그를 참조하세요.
ASP.NET Core - 디버거를 사용하지 않고 앱을 시작한 후 로컬 컴퓨터에서 디버깅 프로세스에 연결 사용 msedge.exe 이렇게 하면 프로파일링과 같은 경우에 앱을 더 빠르게 로드하는 데 도움이 될 수 있습니다.
ASP.NET 4 또는 4.5 - IIS 서버의 원격 디버그 원격 도구 및 프로세스에 연결 사용 w3wp.exe 원격 IIS 컴퓨터의 ASP.NET 원격 디버그를 참조하세요.
클라이언트 쪽 스크립트 - 지원되는 앱 형식에 대한 로컬 IIS 서버의 디버그 프로세스에 연결 사용 chrome.exe 또는 msedge.exe 스크립트 디버깅을 사용하도록 설정해야 합니다. Chrome의 경우 디버그 모드에서 Chrome을 실행하고(명령줄에서 chrome.exe --remote-debugging-port=9222 입력), 연결 대상 필드에서 JavaScript 또는 TypeScript를 선택합니다.
C#, Visual Basic 또는 C++ 앱 - 로컬 컴퓨터에서 디버그 표준 디버깅(F5) 또는 프로세스에 연결 을 사용 <appname>.exe 대부분의 시나리오에서는 프로세스에 연결이 아니라 표준 디버깅을 사용합니다.
Windows 데스크톱 앱 - 원격 디버그 원격 도구 해당 없음 C# 또는 Visual Basic 앱 원격 디버그 또는 C++ 앱 원격 디버그을 참조하세요.
Linux의 .NET Core - 디버그 프로세스에 연결 사용 dotnet.exe 또는 고유한 프로세스 이름 SSH를 사용하려면 SSH를 사용하여 Linux에서 실행되는 .NET Core 원격 디버그를 참조하세요. 컨테이너화된 앱의 경우에는 Docker 컨테이너에서 실행되는 프로세스에 연결을 참조하세요.
컨테이너화된 앱 - 디버그 프로세스에 연결 사용 dotnet.exe 또는 고유한 프로세스 이름 Docker 컨테이너에서 실행되는 프로세스에 연결을 참조하세요.
Linux의 Python - 원격 디버그 프로세스에 연결 사용 debugpy Python 도구에서 원격으로 연결을 참조하세요.
지원되는 기타 앱 유형 - 서버 프로세스에서 디버그 서버가 원격인 경우 원격 도구 및 프로세스에 연결 사용 chrome.exe, msedge.exe 또는 기타 프로세스 필요한 경우 리소스 모니터를 사용하여 프로세스를 식별합니다. 원격 디버깅을 참조하세요.
UWP(유니버설 Windows 플랫폼) 앱, OneCore, HoloLens 또는 IoT 앱 - 원격 디버그 설치된 앱 패키지 디버그 해당 없음 프로세스에 연결을 사용하는 대신 설치된 앱 패키지 디버그를 참조하세요.
UWP(유니버설 Windows 플랫폼) 앱, OneCore, HoloLens 또는 IoT - Visual Studio에서 시작하지 않은 앱 디버그 설치된 앱 패키지 디버그 해당 없음 프로세스에 연결을 사용하는 대신 설치된 앱 패키지 디버그를 참조하세요.

디버거 기능 사용

프로세스에 연결할 때 Visual Studio 디버거의 전체 기능(예: 중단점 적중)을 사용하려면 앱이 로컬 소스 및 기호와 정확히 일치해야 합니다. 즉, 디버거가 올바른 기호(.pdb) 파일을 로드할 수 있어야 합니다. 기본적으로 이를 위해 디버그 빌드가 필요합니다.

원격 디버깅 시나리오의 경우 Visual Studio에서 이미 열려 있는 소스 코드(또는 소스 코드의 복사본)가 있어야 합니다. 원격 컴퓨터의 컴파일된 애플리케이션 이진 파일은 로컬 컴퓨터와 동일한 빌드에서 가져와야 합니다.

일부 로컬 디버깅 시나리오에서는 애플리케이션에 올바른 기호 파일이 있는 경우 소스에 액세스하지 않고 Visual Studio에서 디버그할 수 있습니다. 기본적으로 이를 위해 디버그 빌드가 필요합니다. 자세한 내용은 기호 파일 및 소스 파일 지정을 참조하세요.

연결 오류 문제 해결

일부 시나리오에서 디버거는 디버그할 코드 형식을 올바르게 식별하는 데 도움이 필요할 수 있습니다. 연결 값이 올바르게 설정되었지만(사용 가능한 프로세스 목록에서 올바른 프로세스를 볼 수 있음) 디버거가 연결되지 않는 경우 연결 형식 목록에서 가장 적합한 연결 형식을 선택합니다. 예를 들어 Linux 또는 Python 앱을 디버깅하는 경우 이 작업이 필요합니다. 기본 연결 형식을 사용하는 경우 이 섹션의 뒷부분에서 설명하는 대로 연결할 특정 형식의 코드를 선택할 수 있습니다.

실행 중인 프로세스에 디버거를 연결할 때 이 프로세스에는 한 가지 이상의 코드 형식이 포함될 수 있습니다. 디버거가 연결될 수 있는 코드 형식이 코드 형식 선택 대화 상자에서 표시되고 선택됩니다.

때로는 디버거가 한 코드 형식에는 연결되고 다른 코드 형식에는 연결되지 않을 수도 있습니다. 일반적으로 다음과 같은 경우에 발생합니다.

  • 원격 컴퓨터에서 실행 중인 프로세스에 연결하려고 합니다. 원격 컴퓨터에 설치된 원격 디버깅 구성 요소가 일부 코드 형식만 지원하고 다른 코드 형식은 지원하지 않을 수도 있습니다.
  • 데이터베이스를 직접 디버깅하기 위해 두 개 이상의 프로세스에 연결하려고 합니다. SQL 디버깅은 단일 프로세스에 대한 연결만 지원합니다.

디버거를 일부 코드 형식에 연결할 수 있지만 모든 코드 형식에 연결할 수는 없는 경우 연결할 수 없는 형식을 알려 주는 메시지가 표시됩니다.

적어도 하나의 코드 형식에 디버거가 성공적으로 연결되면 프로세스 디버깅을 진행할 수 있습니다. 이 경우 성공적으로 연결된 코드 형식만 디버깅할 수 있습니다. 프로세스에서 연결되지 않은 코드는 계속 실행되지만 중단점을 설정하거나 데이터를 보거나 해당 코드에 다른 디버깅 작업을 수행할 수 없습니다.

특정 코드 형식에 디버거가 연결되지 않는 이유를 보다 구체적으로 확인하려면 해당 코드 형식에만 다시 연결해 보세요.

코드 형식에 연결하지 못한 이유에 대한 자세한 정보를 얻으려면:

  1. 프로세스에서 분리합니다. 디버그 메뉴에서 모두 분리를 선택합니다.

  2. 연결에 실패한 코드 형식만 선택하여 프로세스에 다시 연결합니다.

    1. 프로세스에 연결 대화 상자의 사용 가능한 프로세스 목록에서 프로세스를 선택합니다.

    2. 선택을 선택합니다.

    3. 코드 형식 선택 대화 상자에서 다음 코드 형식 디버깅 을 선택하고 연결에 실패한 코드 형식을 선택합니다. 다른 코드 형식을 선택 취소합니다.

    4. 확인을 선택합니다.

    5. 프로세스에 연결 대화 상자에서 연결을 선택합니다.

    이렇게 하면 연결이 완전히 실패하고 자세한 오류 메시지가 나타납니다.