Share via


프로세스에 연결하여 SSH를 이용해 Linux에서 .NET Core 디버그

Visual Studio 2017부터 SSH(Secure Shell)를 통해 로컬 또는 원격 Linux 배포에서 실행되는 .NET Core 및 .NET 5+ 프로세스에 연결할 수 있습니다. 이 문서에서는 디버깅을 설정하는 방법과 디버그하는 방법을 설명합니다. Docker 컨테이너를 사용하는 디버깅 시나리오는 Docker 컨테이너에서 실행되는 프로세스에 연결컨테이너 도구 문서를 참조하세요. 프로세스에 연결하지 않고 Visual Studio의 WSL 2에서 Linux를 디버그하려면 Visual Studio를 사용하여 WSL 2에서 .NET Core 앱 디버그를 참조하세요.

참고

AKS(Azure Kubernetes Service)에서 실행되는 Linux 디버깅의 경우 프로세스에 연결하는 대신 Bridge to Kubernetes를 사용하는 것이 좋습니다.

필수 조건

  • Linux 서버에서 SSH 서버를 설치해야 합니다(curl 또는 wget을 사용하여 압축을 풀고 설치). 예를 들어 Ubuntu에서 다음을 실행하여 이 작업을 수행할 수 있습니다.

    sudo apt-get install openssh-server unzip curl
    

    SFTP와 SSH를 모두 사용하도록 설정해야 합니다. 대부분의 SSH 배포는 기본적으로 SFTP를 설치하고 사용하도록 설정 하지만 항상 그렇지는 않습니다.

  • Linux 서버에서 .NET 런타임을 Linux에 설치하고, Linux 배포(예: Ubuntu)에 해당하는 페이지를 찾으세요. .NET SDK는 없어도 됩니다.

  • 전체 ASP.NET Core 지침은 Nginx를 사용하여 Linux에서 ASP.NET Core 호스트Apache를 사용하여 Linux에서 ASP.NET Core 호스트를 참조하세요.

애플리케이션 디버그 준비

디버그할 애플리케이션을 준비하려면

  • 애플리케이션을 빌드할 때 디버그 구성을 사용하는 것이 좋습니다. 리테일 컴파일 코드(릴리스 구성)는 디버그 의해 컴파일 코드보다 디버그하기 훨씬 어렵습니다. 릴리스 구성을 사용해야 하는 경우 먼저 내 코드만을 사용하지 않도록 설정합니다. 이 설정을 해제하려면 도구>옵션>디버깅을 선택한 다음 내 코드만 사용을 선택 취소합니다.
  • 프로젝트가 이식 가능 PDB(기본 설정)를 생성하도록 구성되었는지, PDB가 DLL과 동일한 위치에 있는지 확인합니다. Visual Studio에서 이를 구성하려면 프로젝트를 마우스 오른쪽 단추로 클릭하고 속성>일반>디버그 기호를 선택합니다.
  • 프로젝트가 이식 가능 PDB(기본 설정)를 생성하도록 구성되었는지, PDB가 DLL과 동일한 위치에 있는지 확인합니다. Visual Studio에서 이를 구성하려면 프로젝트를 마우스 오른쪽 단추로 클릭하고 속성>빌드>고급>디버깅 정보를 선택합니다.

애플리케이션 빌드 및 배포

디버그하기 전에 여러 가지 방법을 사용하여 앱을 배포할 수 있습니다. 예를 들어 다음 작업을 할 수 있습니다.

  • 소스를 대상 컴퓨터에 복사하고 Linux 컴퓨터의 dotnet build를 사용하여 빌드합니다.

  • Windows에서 앱을 빌드한 다음 빌드 아티팩트를 Linux 컴퓨터로 전송합니다. (빌드 아티팩트는 애플리케이션 자체, 이식 가능 PDB, 종속될 수 있는 런타임 라이브러리 및 .deps.json 파일로 구성됩니다.)

앱이 배포되면 애플리케이션을 시작합니다.

디버거 연결

애플리케이션이 Linux 컴퓨터에서 실행 중이라면 디버거를 연결할 수 있습니다.

  1. Visual Studio에서 디버그>프로세스에 연결... 을 선택합니다.

  2. 연결 형식 목록에서 SSH를 선택합니다.

  3. 연결 대상을 대상 컴퓨터의 IP 주소 또는 호스트 이름으로 변경합니다.

    자격 증명을 아직 입력하지 않았다면 암호 및/또는 프라이빗 키 파일을 입력하라는 메시지가 표시됩니다.

    포트 요구 사항으로는 SSH 서버가 실행 중인 포트만 구성하면 됩니다.

  4. 디버그할 프로세스를 찾습니다.

    코드는 고유한 프로세스 이름 또는 dotnet이라는 프로세스에서 실행됩니다. 원하는 프로세스를 찾으려면 프로세스의 명령줄 인수를 보여 주는 Title 열을 확인합니다.

    다음 예제에서는 프로세스에 연결 대화 상자에 SSH 전송을 사용하는 원격 Linux 컴퓨터의 프로세스 목록이 표시된 것을 볼 수 있습니다.

    Attach to Linux process

  5. 연결을 선택합니다.

  6. 표시되는 대화 상자에서 디버그하려는 코드의 형식을 선택합니다. 관리형(UNIX용 .NET Core) 을 선택합니다.

  7. Visual Studio 디버깅 기능을 사용하여 앱을 디버그합니다.

    다음 예제에서 Visual Studio 디버거가 원격 Linux 컴퓨터에서 실행되는 코드의 중단점에서 중지된 것을 볼 수 있습니다.

    Hit a breakpoint