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-dsrouter
destina-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 (localhost
ou [::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 aDOTNET_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
ouiOS
paraTcpClient
, e apenasAndroid
paraTcpServer
. Certifique-se de definirANDROID_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 usandoDOTNET_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
ouiOS
paraTcpClient
, e apenasAndroid
paraTcpServer
. Certifique-se de definirANDROID_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 conectar127.0.0.1
,[::1]
, endereço IPv4, endereço IPv6, endereços de nome de host. Inicie o tempo de execução usandoDOTNET_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
ouiOS
paraTcpClient
, e apenasAndroid
paraTcpServer
. Certifique-se de definirANDROID_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 conectar127.0.0.1
,[::1]
, endereço IPv4, endereço IPv6, endereços de nome de host. Inicie o tempo de execução usandoDOTNET_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
ouiOS
paraTcpClient
, e apenasAndroid
paraTcpServer
. Certifique-se de definirANDROID_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 usandoAndroidEnvironment
:Crie um arquivo no mesmo diretório que o .csproj usando um nome como
app.env
, adicione variáveis de ambiente ao arquivoDOTNET_DiagnosticPorts=127.0.0.1:9000,suspend
e inclua o seguinteItemGroup
em .csproj:<ItemGroup Condition="'$(AndroidEnableProfiler)'=='true'"> <AndroidEnvironment Include="app.env" /> </ItemGroup>
Também é possível definir
DOTNET_DiagnosticPorts
usandoadb 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 em127.0.0.1:9000
execução e aguardará a conexão das ferramentas de diagnóstico antes de retomar adotnet-dsrouter
execução do aplicativo.Inicie
dotnet-trace
no modo de coleta, conectando-se aodotnet-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-dsrouter
o , 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.