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 curlSFTP는 SSH뿐만 아니라 사용하도록 설정해야 합니다. 대부분의 SSH 배포판은 기본적으로 SFTP를 설치하고 사용하도록 설정하지만 항상 그런 것은 아닙니다.
Linux 서버에서 Linux에 .NET 런타임을 설치하고 Linux 배포와 일치하는 페이지(예: Ubuntu)를 찾습니다. .NET SDK는 필요하지 않습니다.
포괄적인 ASP.NET Core 지침은 Nginx를 사용하는 Linux의 Host ASP.NET Core 및 Apache를 사용하는 Linux의 Host ASP.NET Core를 참조하세요.
디버깅을 위한 애플리케이션 준비
애플리케이션을 빌드할 때 디버그 구성을 사용하는 것이 좋습니다. 리테일 컴파일 코드(릴리스 구성)는 디버그 컴파일 코드보다 디버그하기가 더 어렵습니다. 릴리스 구성을 사용해야 하는 경우 먼저 내 코드만 기능을 사용하지 않도록 설정합니다. 도구>옵션 창을 열고 모든 설정>디버깅> 섹션을 확장합니다. 내 코드만 사용 확인란의 선택을 취소합니다.
애플리케이션을 빌드할 때 디버그 구성을 사용하는 것이 좋습니다. 리테일 컴파일 코드(릴리스 구성)는 디버그 컴파일 코드보다 디버그하기가 더 어렵습니다. 릴리스 구성을 사용해야 하는 경우 먼저 내 코드만 기능을 사용하지 않도록 설정합니다. 도구>옵션 대화 상자를 열고 디버깅> 섹션을 확장합니다. 내 코드만 사용 확인란의 선택을 취소합니다.
프로젝트가 이식 가능한 PDB (기본 설정)를 생성하도록 구성되어 있는지 확인하고 PDB가 DLL과 동일한 위치에 있는지 확인합니다. Visual Studio에서 이를 구성하려면 프로젝트를 마우스 오른쪽 단추로 클릭한 다음 속성>일반>디버그 기호를 선택합니다.
프로젝트가 이식 가능한 PDB (기본 설정)를 생성하도록 구성되어 있는지 확인하고 PDB가 DLL과 동일한 위치에 있는지 확인합니다. Visual Studio에서 이를 구성하려면 프로젝트를 마우스 오른쪽 단추로 클릭한 다음 속성>빌드>고급>디버깅 정보를 선택합니다.
애플리케이션 빌드 및 배포
디버깅을 시작하기 전에 여러 가지 방법을 사용하여 앱을 배포할 수 있습니다. 예를 들어, 다음을 할 수 있습니다:
소스를 대상 컴퓨터에 복사하고 Linux 컴퓨터에서
dotnet build로 빌드합니다.Windows에서 앱을 빌드한 다음 빌드 아티팩트에서 Linux 머신으로 전송합니다. (빌드 아티팩트 애플리케이션 자체, 이식 가능한 PDB, 의존할 수 있는 런타임 라이브러리 및 .deps.json 파일로 구성됩니다.
앱이 배포되면 애플리케이션을 시작합니다.
디버거 연결
애플리케이션이 Linux 컴퓨터에서 실행 중인 경우 디버거를 연결할 준비가 된 것입니다.
Visual Studio에서 디버그>프로세스에 연결...을 선택합니다.
연결 유형 목록에서 SSH를 선택합니다.
연결 대상을 대상 컴퓨터의 IP 주소 또는 호스트 이름으로 변경합니다.
자격 증명을 제공하지 않은 경우 암호 및/또는 프라이빗 키 파일을 입력하라는 메시지가 표시됩니다. 프라이빗 키 파일 사용에 대한 자세한 내용은 원격 연결 설정을 참조하세요.
SSH 서버가 실행 중인 포트를 제외하고 구성해야 하는 포트 요구 사항은 없습니다.
디버그하려는 프로세스를 찾습니다.
코드는 고유한 프로세스 이름 또는 dotnet이라는 프로세스에서 실행됩니다. 관심 있는 프로세스를 찾으려면 프로세스에 대한 명령줄 인수를 보여 주는 제목 열을 확인합니다.
다음 예제에서는 프로세스에 연결 대화 상자에 표시된 SSH 전송을 통해 원격 Linux 컴퓨터의 프로세스 목록을 볼 수 있습니다.
선택 후연결합니다.
표시되는 대화 상자에서 디버그할 코드 유형을 선택합니다. 관리형(Unix용.NET Core)을 선택합니다.
Visual Studio 디버깅 기능을 사용하여 앱을 디버그합니다.
다음 예제에서는 원격 Linux 컴퓨터에서 실행되는 코드의 중단점에서 Visual Studio 디버거가 중지된 것을 볼 수 있습니다.