다음을 통해 공유


dotnet-dsrouter

이 문서의 적용 대상: ✔️ .NET 6.0 SDK 이상 버전

설치

dotnet-dsrouter NuGet 패키지의 최신 릴리스 버전을 설치하려면 dotnet tool install 명령을 사용합니다.

dotnet tool install --global dotnet-dsrouter

개요

dotnet-dsrouter [-?, -h, --help] [--version] <command>

설명

dotnet-dsrouter는 에뮬레이터, 시뮬레이터 또는 디바이스 자체에서 실행되는지 여부에 관계없이 dotnet-tracedotnet-counters 같은 진단 도구를 Android, iOS 및 tvOS에서 실행되는 .NET 애플리케이션에 연결합니다. 진단 도구는 로컬 IPC(프로세스 간 통신)(명명된 파이프, Unix 도메인 소켓)를 사용하여 .NET 런타임에 연결하고 통신합니다. 에뮬레이터, 시뮬레이터 및 디바이스의 샌드박스 환경에서 실행되는 .NET 애플리케이션에는 다른 통신 방법이 필요합니다. dotnet-dsrouter는 기존 진단 도구와 .NET 모바일 애플리케이션 사이에 개입하여 애플리케이션의 로컬 표현을 만듭니다. dotnet-dsrouter를 사용하면 진단 도구가 로컬 컴퓨터에서 실행 중인 것처럼 원격 .NET 런타임과 통신할 수 있습니다.

진단 도구와 dotnet-dsrouter 간의 통신은 로컬 .NET 런타임에 연결할 때 사용되는 것과 동일한 IPC(명명된 파이프, Unix 도메인 소켓)를 사용합니다. dotnet-dsrouter에서는 원격 .NET 런타임과의 통신에 TCP/IP를 사용하고 여러 플랫폼에서 사용하는 다양한필요 및 요구 사항을 처리할 수 있도록 여러 가지 연결 시나리오를 지원합니다. 또한 dotnet-dsrouter는 에뮬레이터, 시뮬레이터 및 USB를 통해 연결된 물리적 디바이스에서 실행할 때 연결 구성을 간소화하기 위한 추가 지원도 구현합니다.

참고 항목

dotnet-dsrouter는 개발 및 테스트용이며 dotnet-dsrouter 루프백 인터페이스(예: 127.0.0.1, [::1])를 통해 실행하는 것이 좋습니다. dotnet-dsrouter의 연결 기능 및 포트 전달 기능은 로컬 에뮬레이터, 시뮬레이터 또는 USB를 통해 연결된 물리적 디바이스를 사용하여 모든 시나리오를 처리합니다.

Warning

루프백 인터페이스(localhost, 127.0.0.1 또는 [::1])를 제외한 모든 엔드포인트에 TCP 서버 엔드포인트를 바인딩하지 않는 것이 좋습니다. TCP 서버 엔드포인트에 대한 모든 연결은 인증되지 않고 암호화되지 않습니다. dotnet-dsrouter는 개발 용도로 사용되며 개발 및 테스트 환경에서만 실행해야 합니다.

dotnet-dsrouter를 모바일 애플리케이션과 함께 사용하는 방법은 각 .NET SDK에서 간략하게 설명합니다. 이 문서에는 Android에서 실행되는 .NET 애플리케이션에 대해 진단 도구를 실행하는 방법을 보여주는 몇 가지 예제만 포함됩니다. 구성 및 시나리오에 대한 자세한 내용은 진단 추적을 참조하세요.

옵션

  • -?|-h|--help

    명령줄 도움말을 표시합니다.

  • --version

    dotnet-dsrouter 유틸리티의 버전을 표시합니다.

명령

명령
dotnet-dsrouter client-server
dotnet-dsrouter server-server
dotnet-dsrouter server-client
dotnet-dsrouter client-client

dotnet-dsrouter client-server

로컬 IPC 서버 및 원격 TCP 클라이언트를 라우팅하는 .NET 애플리케이션 진단 서버를 시작합니다. 라우터는 IPC 클라이언트(진단 도구 IPC 서버를 연결) 및 TCP/IP 서버(런타임 TCP 클라이언트를 허용)를 사용하여 구성됩니다.

개요

dotnet-dsrouter client-server
    [-ipcc|--ipc-client <ipcClient>]
    [-tcps|--tcp-server <tcpServer>]
    [-rt|--runtime-timeout <timeout>]
    [-v|--verbose <level>]
    [-fp|--forward-port <platform>]

옵션

  • -ipcc, --ipc-client <ipcClient>

    진단 도구 진단 서버 IPC 주소(--diagnostic-port 인수)를 지정합니다. 런타임과 진단 도구 사이에 새로운 경로를 설정할 때 라우터는 진단 도구 IPC 서버에 연결됩니다.

  • -tcps, --tcp-server <tcpServer>

    [host]:[port] 형식을 사용하여 라우터 TCP/IP 주소를 지정합니다. 라우터는 인터페이스를 하나(127.0.0.1, [::1], 0.0.0.0, [::], IPv4 주소, IPv6 주소, 호스트 이름) 또는 모두(*) 바인딩할 수 있습니다. DOTNET_DiagnosticPorts 환경 변수를 사용하여 런타임을 시작하고 시작 중에 라우터 TCP 서버를 연결합니다.

  • -rt, --runtime-timeout <runtimeTimeout>

    지정된 시간 제한(초) 전에 런타임이 라우터에 연결되지 않으면 자동으로 라우터를 종료합니다. 지정하지 않으면 라우터가 자동 종료를 트리거하지 않습니다.

  • -v, --verbose <verbose>

    자세한 로깅을 사용하도록 설정합니다(debug|trace).

  • -fp, --forward-port <forwardPort>

    포트 전달을 사용하도록 설정합니다. 값은 TcpClient의 경우 Android 또는 iOS이고, TcpServer의 경우 값은 Android입니다. Android에서 이 옵션을 사용하려면 먼저 ANDROID_SDK_ROOT를 설정해야 합니다.

dotnet-dsrouter server-server

로컬 IPC 클라이언트 및 원격 TCP 클라이언트를 라우팅하는 .NET 애플리케이션 진단 서버를 시작합니다. 라우터는 IPC 서버(진단 도구가 연결) 및 TCP/IP 서버(런타임 TCP 클라이언트를 허용)를 사용하여 구성됩니다.

개요

dotnet-dsrouter server-server
    [-ipcs|--ipc-server <ipcServer>]
    [-tcps|--tcp-server <tcpServer>]
    [-rt|--runtime-timeout <timeout>]
    [-v|--verbose <level>]
    [-fp|--forward-port <platform>]

옵션

  • -ipcs, --ipc-server <ipcServer>

    라우팅할 진단 서버 IPC 주소입니다. 라우터는 런타임과 진단 도구 간에 새 경로를 설정하는 진단 도구의 IPC 연결을 허용합니다. 지정하지 않으면 라우터는 기본 IPC 진단 서버 경로를 사용합니다.

  • -tcps, --tcp-server <tcpServer>

    [host]:[port] 형식의 라우터 TCP/IP 주소입니다. 라우터는 인터페이스를 하나(127.0.0.1, [::1], 0.0.0.0, [::], IPv4 주소, IPv6 주소, 호스트 이름) 또는 모두(*) 바인딩할 수 있습니다. DOTNET_DiagnosticPorts 환경 변수를 사용하여 런타임을 시작하고, 시작하는 동안 라우터 TCP 서버를 연결합니다.

  • -rt, --runtime-timeout <runtimeTimeout>

    지정된 시간 제한(초) 전에 런타임이 라우터에 연결되지 않으면 자동으로 라우터를 종료합니다. 지정하지 않으면 라우터가 자동 종료를 트리거하지 않습니다.

  • -v, --verbose <verbose>

    자세한 로깅을 사용하도록 설정합니다(debug|trace).

  • -fp, --forward-port <forwardPort>

    포트 전달을 사용하도록 설정합니다. 값은 TcpClient의 경우 Android 또는 iOS이고, TcpServer의 경우 값은 Android입니다. Android에서 이 옵션을 사용하려면 먼저 ANDROID_SDK_ROOT를 설정해야 합니다.

dotnet-dsrouter server-client

로컬 IPC 클라이언트 및 원격 TCP 서버를 라우팅하는 .NET 애플리케이션 진단 서버를 시작합니다. 라우터는 IPC 서버(진단 도구가 연결) 및 TCP/IP 클라이언트(런타임 TCP 서버를 연결)를 사용하여 구성됩니다.

개요

dotnet-dsrouter server-client
    [-ipcs|--ipc-server <ipcServer>]
    [-tcpc|--tcp-client <tcpClient>]
    [-rt|--runtime-timeout <timeout>]
    [-v|--verbose <level>]
    [-fp|--forward-port <platform>]

옵션

  • -ipcs, --ipc-server <ipcServer>

    라우팅할 진단 서버 IPC 주소입니다. 라우터는 런타임과 진단 도구 간에 새 경로를 설정하는 진단 도구의 IPC 연결을 허용합니다. 지정하지 않으면 라우터는 기본 IPC 진단 서버 경로를 사용합니다.

  • -tcpc, --tcp-client <tcpClient>

    [host]:[port] 형식의 런타임 TCP/IP 주소입니다. 라우터는 127.0.0.1, [::1], IPv4 주소, IPv6 주소, 호스트 이름 주소를 연결할 수 있습니다. 수신기를 설정하려면 DOTNET_DiagnosticPorts 환경 변수를 사용하여 런타임을 시작합니다.

  • -rt, --runtime-timeout <runtimeTimeout>

    지정된 시간 제한(초) 전에 런타임이 라우터에 연결되지 않으면 자동으로 라우터를 종료합니다. 지정하지 않으면 라우터가 자동 종료를 트리거하지 않습니다.

  • -v, --verbose <verbose>

    자세한 로깅을 사용하도록 설정합니다(debug|trace).

  • -fp, --forward-port <forwardPort>

    포트 전달을 사용하도록 설정합니다. 값은 TcpClient의 경우 Android 또는 iOS이고, TcpServer의 경우 값은 Android입니다. Android에서 이 옵션을 사용하려면 먼저 ANDROID_SDK_ROOT를 설정해야 합니다.

dotnet-dsrouter client-client

로컬 IPC 서버 및 원격 TCP 서버를 라우팅하는 .NET 애플리케이션 진단 서버를 시작합니다. 라우터는 IPC 클라이언트(진단 도구 IPC 서버를 연결) 및 TCP/IP 클라이언트(런타임 TCP 서버를 연결)를 사용하여 구성됩니다.

개요

dotnet-dsrouter client-client
    [-ipcc|--ipc-client <ipcClient>]
    [-tcpc|--tcp-client <tcpClient>]
    [-rt|--runtime-timeout <timeout>]
    [-v|--verbose <level>]
    [-fp|--forward-port <platform>]

옵션

  • -ipcc, --ipc-client <ipcClient>

    진단 도구 진단 서버 IPC 주소입니다(--diagnostic-port argument). 라우터는 런타임과 진단 도구 간에 새 경로를 설정할 때 진단 도구 IPC 서버에 연결합니다.

  • -tcpc, --tcp-client <tcpClient>

    [host]:[port] 형식의 런타임 TCP/IP 주소입니다. 라우터는 127.0.0.1, [::1], IPv4 주소, IPv6 주소, 호스트 이름 주소를 연결할 수 있습니다. 수신기를 설정하려면 DOTNET_DiagnosticPorts 환경 변수를 사용하여 런타임을 시작합니다.

  • -rt, --runtime-timeout <runtimeTimeout>

    지정된 시간 제한(초) 전에 런타임이 라우터에 연결되지 않으면 자동으로 라우터를 종료합니다. 지정하지 않으면 라우터가 자동 종료를 트리거하지 않습니다.

  • -v, --verbose <verbose>

    자세한 로깅을 사용하도록 설정합니다(debug|trace).

  • -fp, --forward-port <forwardPort>

    포트 전달을 사용하도록 설정합니다. 값은 TcpClient의 경우 Android 또는 iOS이고, TcpServer의 경우 값은 Android입니다. Android에서 이 옵션을 사용하려면 먼저 ANDROID_SDK_ROOT를 설정해야 합니다.

Android에서 실행되는 .NET 애플리케이션에서 dotnet-trace를 사용하여 시작 추적 수집

경우에 따라 시작부터 애플리케이션의 추적을 수집하는 것이 유용할 수 있습니다. 다음 단계에서는 Android에서 실행되는 .NET 애플리케이션을 대상으로 지정하는 과정을 보여 줍니다. dotnet-dsrouter는 포트 전달을 사용하여 실행되므로 동일한 시나리오가 로컬 에뮬레이터 및 USB를 통해 연결된 물리적 디바이스에서 실행되는 애플리케이션에서도 작동합니다. 이 옵션을 사용하기 전에 ANDROID_SDK_ROOT를 설정해야 합니다. 그렇지 않으면 dotnet-dsrouter가 포트 전달을 설정하는 데 필요한 adb를 찾을 수 없습니다.

  • 서버-서버 모드에서 dotnet-dsrouter 시작:

    dotnet-dsrouter server-server -ipcs ~/mylocalport -tcps 127.0.0.1:9000 --forward-port Android &
    
  • AndroidEnvironment를 사용하여 DOTNET_DiagnosticPorts 환경 변수 설정:

    app.env와 같은 이름을 사용하여 .csproj와 동일한 디렉터리에 파일을 만들고, 파일에 환경 변수 DOTNET_DiagnosticPorts=127.0.0.1:9000,suspend를 추가하고, 다음 ItemGroup.csproj에 다음을 포함합니다.

    <ItemGroup Condition="'$(AndroidEnableProfiler)'=='true'">
      <AndroidEnvironment Include="app.env" />
    </ItemGroup>
    

    adb shell setprop을 사용하여 DOTNET_DiagnosticPorts를 설정할 수도 있습니다.

    adb shell setprop debug.mono.profile '127.0.0.1:9000,suspend'
    
  • .NET Android SDK를 사용하여 애플리케이션을 빌드 및 시작하고 /p:AndroidEnableProfiler=true를 MSBuild에 전달하여 추적을 사용하도록 설정합니다. 앱은 시작 시 일시 중단하도록 구성되었으므로 127.0.0.1:9000에서 실행되는 dotnet-dsrouter TCP/IP 수신기에 다시 연결하고 진단 도구가 연결될 때까지 기다렸다가 애플리케이션 실행을 다시 시작합니다.

  • 수집 모드에서 dotnet-trace를 시작하여 dotnet-dsrouter IPC 서버 ~/mylocalport에 연결합니다.

      dotnet-trace collect --diagnostic-port ~/mylocalport,connect
    

dotnet-trace는 추적 세션을 시작하고 애플리케이션을 다시 시작합니다. 그러면 애플리케이션이 계속 실행됩니다. 이벤트 스트림은 모바일 애플리케이션에서 dotnet-dsrouter를 거쳐 dotnet-trace nettrace 파일로 흐르기 시작합니다. 추적이 완료되면 애플리케이션이 닫히기 전에 nettrace 파일에 필요한 모든 데이터가 포함되도록 Enter 키를 눌러 애플리케이션을 올바로 종료합니다.

실행 중인 동일한 애플리케이션에 대해 여러 추적 세션을 실행하고, dotnet-dsrouter를 계속 실행하고, 새 추적 세션이 필요할 때 dotnet-trace를 다시 실행할 수 있습니다.

애플리케이션이 해당 주소 및 포트를 사용하여 연결하도록 구성된 경우 dotnet-dsrouter를 백그라운드에서 계속 실행하며 다시 사용할 수 있습니다.

dotnet-dsrouter는 한 번에 하나의 실행 중인 애플리케이션에만 연결됩니다. 동시에 여러 애플리케이션을 추적해야 하는 경우 각 애플리케이션은 dotnet-dsrouter에서 고유한 IPC, TCP/IP 주소 쌍을 설정하고 고유한 dotnet-dsrouter 인스턴스에 다시 연결하도록 다른 애플리케이션 인스턴스를 구성하여 자체 dotnet-dsrouter 인스터스를 사용해야 합니다.

Android 및 adb 서버를 대상으로 --forward-port를 사용하여 dotnet-dsrouter를 실행하는 경우 에뮬레이터 또는 디바이스가 다시 시작되면 모든 dotnet-dsrouter 인스턴스를 다시 시작하여 포트 전달 규칙을 복원해야 합니다.

dotnet-dsrouter 사용을 마친 후에는 Q 또는 Ctrl + C를 눌러 애플리케이션을 종료합니다

참고 항목

dotnet-dsrouter를 Windows에서 실행하는 경우 IPC 채널에 대해 명명된 파이프를 사용합니다. Windows에서 실행되는 경우 위의 예제에서 ~/mylocalport를 mylocalport로 바꿉니다.

참고 항목

TCP/IP 포트 9000은 한 가지 예입니다. 사용 가능한 TCP/IP 포트는 모두 사용할 수 있습니다.

참고 항목

Unix 도메인 소켓 ~/mylocalport는 한 가지 예입니다. 사용 가능한 Unix 도메인 소켓 파일 경로는 모두 사용할 수 있습니다.

Android에서 실행되는 .NET 애플리케이션에서 dotnet-trace를 사용하여 추적 수집

애플리케이션 시작 중에 추적을 수집하지 않아도 되는 경우 애플리케이션을 nosuspend 모드에서 시작할 수 있습니다. 즉, 시작 시 런타임이 실행을 다시 시작하기 전에 진단 도구가 연결될 때까지 기다리지 않습니다. 위에서 설명한 시나리오는 대부분 이 모드에도 적용됩니다. nosuspend 모드에서 애플리케이션을 시작하려면 DOTNET_DiagnosticPorts 환경 변수에서 suspendnosuspend로 바꿉니다.

참고 항목