Partilhar via


dotnet-dsrouter

Este artigo aplica-se a: ✔️ SDK do .NET 6.0 e versões posteriores

Instalar

Para instalar a versão mais recente do dotnet-dsrouter pacote NuGet, use o comando dotnet tool install :

dotnet tool install --global dotnet-dsrouter

Sinopse

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

Description

O dotnet-dsrouter conecta ferramentas de diagnóstico como dotnet-trace e dotnet-counters para aplicativos .NET executados no Android, iOS e tvOS, independentemente de estarem sendo executados como um emulador, simulador ou no próprio dispositivo. As ferramentas de diagnóstico usam comunicação local entre processos (IPC) (Named Pipe, Unix Domain Socket) para se conectar e se comunicar com um tempo de execução .NET. Os aplicativos .NET executados em ambientes de área restrita em emuladores, simuladores e dispositivos precisam de maneiras alternativas de comunicação. O dotnet-dsrouter injeta-se entre as ferramentas de diagnóstico existentes e os aplicativos móveis .NET e cria uma representação local do aplicativo. O dotnet-dsrouter permite que as ferramentas de diagnóstico se comuniquem com um tempo de execução remoto do .NET como se ele estivesse sendo executado na máquina local.

A comunicação entre as ferramentas de diagnóstico e dotnet-dsrouter usa o mesmo IPC (Named Pipe, Unix Domain Socket) usado ao se conectar a um tempo de execução .NET local. dotnet-dsrouter usa TCP/IP em sua comunicação com o tempo de execução remoto do .NET e suporta vários cenários de conectividade diferentes para lidar com diferentes necessidades e requisitos usados por diferentes plataformas. dotnet-dsrouter também implementa suporte adicional para simplificar a configuração de conectividade ao executar em emulador, simulador e em dispositivo físico conectado por USB.

Nota

dotnet-dsrouterdestina-se ao desenvolvimento e teste e é altamente recomendável executar dotnet-dsrouter sobre a interface de loopback (por exemplo, 127.0.0.1[::1], ). Os recursos de conectividade e recursos de encaminhamento de dotnet-dsrouter porta de lida com todos os cenários usando emulador local, simulador ou dispositivo físico conectado por USB.

Aviso

A vinculação do ponto de extremidade do servidor TCP a qualquer coisa, exceto interface de loopback (localhostou [::1]127.0.0.1 ), não é recomendada. Quaisquer conexões com o ponto de extremidade do servidor TCP serão não autenticadas e não criptografadas. dotnet-dsrouter destina-se ao uso de desenvolvimento e só deve ser executado em ambientes de desenvolvimento e teste.

O uso detalhado de aplicativos móveis é descrito pelos respetivos SDKs . dotnet-dsrouter NET. Este documento incluirá apenas alguns exemplos sobre como executar ferramentas de diagnóstico em aplicativos .NET executados no Android. Para obter detalhes detalhados sobre configuração e cenários, consulte Rastreamento de diagnóstico.

Opções

  • -?|-h|--help

    Mostra a ajuda da linha de comando.

  • --version

    Exibe a versão do dotnet-dsrouter utilitário.

Comandos

Comando
dotnet-dsrouter cliente-servidor
dotnet-dsrouter servidor-servidor
dotnet-dsrouter servidor-cliente
dotnet-dsrouter cliente-cliente

dotnet-dsrouter cliente-servidor

Inicie um servidor de diagnóstico de aplicativo .NET, roteamento, servidor IPC local e cliente TCP remoto. O roteador é configurado usando um cliente IPC (ferramenta de diagnóstico de conexão, servidor IPC) e um servidor TCP/IP (aceitando cliente TCP de tempo de execução).

Sinopse

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

Opções

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

    Especifica o endereço IPC (argumento) do servidor de diagnóstico da--diagnostic-port ferramenta de diagnóstico. O roteador se conecta ao servidor IPC da ferramenta de diagnóstico ao estabelecer uma nova rota entre o tempo de execução e a ferramenta de diagnóstico.

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

    Especifica o endereço TCP/IP do roteador usando o formato [host]:[port]. O roteador pode vincular uma (127.0.0.1, [::1], 0.0.0.0, [::], endereço IPv4, endereço IPv6, nome do host) ou todas as interfaces (*). Inicia o tempo de execução usando a DOTNET_DiagnosticPorts variável de ambiente e conecta o servidor TCP do roteador durante a inicialização.

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

    Desliga automaticamente o roteador se nenhum tempo de execução se conectar a ele antes do tempo limite especificado (segundos). Se não for especificado, o roteador não acionará um desligamento automático.

  • -v, --verbose <verbose>

    Permite o registro detalhado (debug|trace).

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

    Permite o encaminhamento de portas. Os valores são Android ou iOS para TcpClient, e apenas Android para TcpServer. Certifique-se de definir ANDROID_SDK_ROOT antes de usar esta opção no Android.

dotnet-dsrouter servidor-servidor

Inicie um servidor de diagnóstico de aplicativo .NET, roteamento de servidor, cliente IPC local e cliente TCP remoto. O roteador é configurado usando um servidor IPC (conectando-se por ferramentas de diagnóstico) e um servidor TCP/IP (aceitando cliente TCP de tempo de execução).

Sinopse

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

Opções

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

    O endereço IPC do servidor de diagnóstico a ser roteado. O roteador aceita conexões IPC de ferramentas de diagnóstico, estabelecendo uma nova rota entre o tempo de execução e a ferramenta de diagnóstico. Se não for especificado, o roteador usará o caminho padrão do servidor de diagnóstico IPC.

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

    O endereço TCP/IP do roteador no formato [host]:[port]. O roteador pode vincular uma (127.0.0.1, [::1], 0.0.0.0, [::], endereço IPv4, endereço IPv6, nome do host) ou todas as interfaces (*). Inicie o tempo de execução usando DOTNET_DiagnosticPorts a variável de ambiente, conectando o servidor TCP do roteador durante a inicialização.

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

    Desliga automaticamente o roteador se nenhum tempo de execução se conectar a ele antes do tempo limite especificado (segundos). Se não for especificado, o roteador não acionará um desligamento automático.

  • -v, --verbose <verbose>

    Permite o registro detalhado (debug|trace).

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

    Permite o encaminhamento de portas. Os valores são Android ou iOS para TcpClient, e apenas Android para TcpServer. Certifique-se de definir ANDROID_SDK_ROOT antes de usar esta opção no Android.

dotnet-dsrouter servidor-cliente

Inicie um servidor de diagnóstico de aplicativos .NET, roteamento de cliente IPC local e servidor TCP remoto. O roteador é configurado usando um servidor IPC (conectando-se por ferramentas de diagnóstico) e um cliente TCP/IP (conectando servidor TCP de tempo de execução).

Sinopse

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

Opções

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

    O endereço IPC do servidor de diagnóstico a ser roteado. O roteador aceita conexões IPC de ferramentas de diagnóstico, estabelecendo uma nova rota entre o tempo de execução e a ferramenta de diagnóstico. Se não for especificado, o roteador usará o caminho padrão do servidor de diagnóstico IPC.

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

    O endereço TCP/IP de tempo de execução no formato [host]:[port]. Roteador pode se conectar 127.0.0.1, [::1], endereço IPv4, endereço IPv6, endereços de nome de host. Inicie o tempo de execução usando DOTNET_DiagnosticPorts a variável de ambiente para configurar o ouvinte.

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

    Desliga automaticamente o roteador se nenhum tempo de execução se conectar a ele antes do tempo limite especificado (segundos). Se não for especificado, o roteador não acionará um desligamento automático.

  • -v, --verbose <verbose>

    Permite o registro detalhado (debug|trace).

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

    Permite o encaminhamento de portas. Os valores são Android ou iOS para TcpClient, e apenas Android para TcpServer. Certifique-se de definir ANDROID_SDK_ROOT antes de usar esta opção no Android.

dotnet-dsrouter cliente-cliente

Inicie um servidor de diagnóstico de aplicativos .NET, roteamento, servidor IPC local e servidor TCP remoto. O roteador é configurado usando um cliente IPC (conectando o servidor IPC da ferramenta de diagnóstico) e um cliente TCP/IP (conectando o servidor TCP de tempo de execução).

Sinopse

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

Opções

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

    O endereço IPC do servidor de diagnóstico da ferramenta de diagnóstico (--diagnostic-port argument). O roteador se conecta ao servidor IPC da ferramenta de diagnóstico ao estabelecer uma nova rota entre o tempo de execução e a ferramenta de diagnóstico.

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

    O endereço TCP/IP de tempo de execução no formato [host]:[port]. Roteador pode se conectar 127.0.0.1, [::1], endereço IPv4, endereço IPv6, endereços de nome de host. Inicie o tempo de execução usando DOTNET_DiagnosticPorts a variável de ambiente para configurar o ouvinte.

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

    Desliga automaticamente o roteador se nenhum tempo de execução se conectar a ele antes do tempo limite especificado (segundos). Se não for especificado, o roteador não acionará um desligamento automático.

  • -v, --verbose <verbose>

    Permite o registro detalhado (debug|trace).

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

    Permite o encaminhamento de portas. Os valores são Android ou iOS para TcpClient, e apenas Android para TcpServer. Certifique-se de definir ANDROID_SDK_ROOT antes de usar esta opção no Android.

Coletar um rastreamento de inicialização usando o dotnet-trace de um aplicativo .NET em execução no Android

Às vezes, pode ser útil coletar um rastreamento de um aplicativo de sua inicialização. As etapas a seguir ilustram o processo de fazer isso visando um aplicativo .NET em execução no Android. Como dotnet-dsrouter é executado usando o encaminhamento de portas, o mesmo cenário funciona contra aplicativos executados em um emulador local e em um dispositivo físico conectado por USB. Certifique-se de definir ANDROID_SDK_ROOT antes de usar essa opção ou dotnet-dsrouter não será possível encontrar adb o necessário para configurar o encaminhamento de portas.

  • Inicie dotnet-dsrouter no modo servidor-servidor:

    dotnet-dsrouter server-server -ipcs ~/mylocalport -tcps 127.0.0.1:9000 --forward-port Android &
    
  • Defina DOTNET_DiagnosticPorts a variável de ambiente usando AndroidEnvironment:

    Crie um arquivo no mesmo diretório que o .csproj usando um nome como app.env, adicione variáveis de ambiente ao arquivo DOTNET_DiagnosticPorts=127.0.0.1:9000,suspend e inclua o seguinte ItemGroup em .csproj:

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

    Também é possível definir DOTNET_DiagnosticPorts usando adb shell setprop:

    adb shell setprop debug.mono.profile '127.0.0.1:9000,suspend'
    
  • Crie e inicie o aplicativo usando o .NET Android SDK e habilite o rastreamento passando /p:AndroidEnableProfiler=true para o MSBuild. Como o aplicativo foi configurado para suspender na inicialização, ele se conectará novamente ao ouvinte TCP/IP em 127.0.0.1:9000 execução e aguardará a conexão das ferramentas de diagnóstico antes de retomar a dotnet-dsrouter execução do aplicativo.

  • Inicie dotnet-trace no modo de coleta, conectando-se ao dotnet-dsrouter servidor IPC, ~/mylocalport:

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

dotnet-trace iniciará uma sessão de rastreamento e retomará o aplicativo que agora continuará a ser executado. Um fluxo de eventos começará a fluir do aplicativo móvel, através dotnet-dsrouter dotnet-trace do arquivo nettrace. Quando terminar o rastreamento, pressione Enter para certificar-se de que a sessão de rastreamento está fechada corretamente, certificando-se de que o arquivo nettrace inclui todos os dados necessários antes que o aplicativo seja fechado.

É possível executar várias sessões de rastreamento no mesmo aplicativo em execução ao longo do tempo, sair dotnet-dsrouter em execução e executar novamente dotnet-trace quando uma nova sessão de rastreamento for necessária.

dotnet-dsrouter pode ser deixado em execução em segundo plano e reutilizado se um aplicativo estiver configurado para se conectar usando seu endereço e porta.

dotnet-dsrouter está vinculado a um aplicativo em execução a qualquer momento. Se houver necessidade de rastrear vários aplicativos diferentes ao mesmo tempo, cada aplicativo precisará usar sua própria dotnet-dsrouter instância, configurando um par de endereços IPC, TCP/IP exclusivo e dotnet-dsrouter configurando instâncias de aplicativo diferentes para se conectar de volta à sua instância exclusiva dotnet-dsrouter .

Se dotnet-dsrouter for executado com --forward-port o Android direcionado e adb o servidor, emulador ou dispositivo for reiniciado, todas as dotnet-dsrouter instâncias também precisarão ser reiniciadas para restaurar as regras de encaminhamento de portas.

Quando terminar de usar dotnet-dsroutero , pressione Q ou Ctrl + C para sair do aplicativo.

Nota

Quando executado dotnet-dsrouter no Windows, ele usará pipes nomeados para seu canal IPC. Substitua ~/mylocalport por mylocalport nos exemplos acima ao executar no Windows.

Nota

A porta TCP/IP 9000 é apenas um exemplo. Qualquer porta TCP/IP livre pode ser usada.

Nota

Unix Domain Socket ~/mylocalport é apenas um exemplo. Qualquer caminho de arquivo Unix Domain Socket livre pode ser usado.

Coletar um rastreamento usando dotnet-trace de um aplicativo .NET em execução no Android

Se não houver necessidade de coletar um rastreamento durante a inicialização do aplicativo, é possível iniciar o aplicativo no nosuspend modo, o que significa que o tempo de execução não será bloqueado na inicialização aguardando a conexão das ferramentas de diagnóstico antes de retomar a execução. A maioria do cenário descrito acima se aplica a esse modo também, basta substituir suspend por nosuspend na DOTNET_DiagnosticPorts variável de ambiente para iniciar o aplicativo no nosuspend modo.

Consulte também