dotnet-dsrouter
Questo articolo si applica a: ✓ .NET Core 6.0.x SDK e versioni successive
Installare
Per installare la versione più recente del dotnet-dsrouter
pacchetto NuGet, usare il comando dotnet tool install:
dotnet tool install --global dotnet-dsrouter
Riepilogo
dotnet-dsrouter [-?, -h, --help] [--version] <command>
Descrizione
dotnet-dsrouter
connette strumenti di diagnostica come dotnet-trace
e dotnet-counters
ad applicazioni .NET in esecuzione in Android, iOS e tvOS, indipendentemente dal fatto che siano in esecuzione come emulatore, simulatore o nel dispositivo stesso. Gli strumenti di diagnostica usano la comunicazione tra processi locali (IPC) (Named Pipe, Unix Domain Socket) per connettersi e comunicare con un runtime .NET. Le applicazioni .NET in esecuzione in ambienti in modalità sandbox in emulatori, simulatori e dispositivi richiedono modi alternativi per comunicare. dotnet-dsrouter
si inserisce tra gli strumenti di diagnostica esistenti e le applicazioni per dispositivi mobili .NET e crea una rappresentazione locale dell'applicazione. dotnet-dsrouter
consente agli strumenti di diagnostica di comunicare con un runtime .NET remoto come se fosse in esecuzione nel computer locale.
La comunicazione tra gli strumenti di diagnostica e dotnet-dsrouter
usa lo stesso IPC (Named Pipe, Unix Domain Socket) usato per la connessione a un runtime .NET locale. dotnet-dsrouter
usa TCP/IP nella comunicazione con il runtime .NET remoto e supporta diversi scenari di connettività per gestire esigenze e requisiti diversi usati da piattaforme diverse. dotnet-dsrouter
implementa inoltre supporto aggiuntivo per semplificare la configurazione della connettività durante l'esecuzione nell'emulatore, nel simulatore e nel dispositivo fisico collegato tramite USB.
Nota
dotnet-dsrouter
è destinato allo sviluppo e al test ed è consigliabile eseguire dotnet-dsrouter
tramite l'interfaccia di loopback ( ad esempio, 127.0.0.1
, [::1]
). Le funzionalità di connettività e le funzionalità di port forwarding di dotnet-dsrouter
gestiscono tutti gli scenari usando emulatore locale, simulatore o dispositivo fisico connesso tramite USB.
Avviso
L'associazione dell'endpoint server TCP a qualsiasi elemento tranne l'interfaccia loopback (localhost
, 127.0.0.1
o [::1]
) non è consigliata. Tutte le connessioni verso l'endpoint server TCP non verranno autenticate e non crittografate. dotnet-dsrouter
è destinato all'uso dello sviluppo e deve essere eseguito solo in ambienti di sviluppo e test.
L'utilizzo dettagliato di dotnet-dsrouter
insieme alle applicazioni per dispositivi mobili è descritto dai rispettivi SDK .NET. Questo documento includerà solo un paio di esempi su come eseguire gli strumenti di diagnostica sull'applicazione .NET in esecuzione in Android. Per informazioni dettagliate sulla configurazione e sugli scenari, vedere Analisi diagnostica.
Opzioni
-?|-h|--help
Mostra la Guida della riga di comando.
--version
Visualizza la versione del servizio
dotnet-dsrouter
.
Comandi
Comando |
---|
dotnet-dsrouter client-server |
dotnet-dsrouter server-server |
dotnet-dsrouter server-client |
dotnet-dsrouter client-client |
dotnet-dsrouter client-server
Avviare un server di diagnostica applicazioni .NET che instrada il server IPC locale e il client TCP remoto. Il router viene configurato usando un client IPC (connessione del server IPC dello strumento di diagnostica) e un server TCP/IP (accettando il client TCP di runtime).
Riepilogo
dotnet-dsrouter client-server
[-ipcc|--ipc-client <ipcClient>]
[-tcps|--tcp-server <tcpServer>]
[-rt|--runtime-timeout <timeout>]
[-v|--verbose <level>]
[-fp|--forward-port <platform>]
Opzioni
-ipcc, --ipc-client <ipcClient>
Specifica l'indirizzo IPC del server di diagnostica dello strumento di diagnostica (argomento
--diagnostic-port
). Il router si connette al server IPC dello strumento di diagnostica quando si stabilisce una nuova route tra il runtime e lo strumento di diagnostica.-tcps, --tcp-server <tcpServer>
Specifica l'indirizzo TCP/IP del router usando il formato
[host]:[port]
. Il router può associare uno (127.0.0.1
,[::1]
,0.0.0.0
,[::]
, indirizzo IPv4, indirizzo IPv6, nome host) o tutte le interfacce (*) . Avvia il runtime usando la variabile di ambienteDOTNET_DiagnosticPorts
e connette il server TCP del router durante l'avvio.-rt, --runtime-timeout <runtimeTimeout>
Arresta automaticamente il router se nessun runtime si connette prima del timeout specificato (secondi). Se non specificato, il router non attiverà un arresto automatico.
-v, --verbose <verbose>
Abilita la registrazione dettagliata (debug|traccia).
-fp, --forward-port <forwardPort>
Abilita il port forwarding. I valori sono
Android
oiOS
perTcpClient
e soloAndroid
perTcpServer
. Assicurarsi di impostareANDROID_SDK_ROOT
prima di usare questa opzione in Android.
dotnet-dsrouter server-server
Avviare un server di diagnostica applicazioni .NET che instrada il server IPC locale e il client TCP remoto. Il router viene configurato usando un server IPC (collegandosi con strumenti di diagnostica) e un server TCP/IP (accettando il client TCP di runtime).
Riepilogo
dotnet-dsrouter server-server
[-ipcs|--ipc-server <ipcServer>]
[-tcps|--tcp-server <tcpServer>]
[-rt|--runtime-timeout <timeout>]
[-v|--verbose <level>]
[-fp|--forward-port <platform>]
Opzioni
-ipcs, --ipc-server <ipcServer>
Indirizzo IPC del server di diagnostica da instradare. Il router accetta le connessioni IPC dagli strumenti di diagnostica che stabiliscono una nuova route tra il runtime e lo strumento di diagnostica. Se non specificato, il router userà il percorso del server di diagnostica IPC predefinito.
-tcps, --tcp-server <tcpServer>
Indirizzo TCP/IP del router nel formato
[host]:[port]
. Il router può associare uno (127.0.0.1
,[::1]
,0.0.0.0
,[::]
, indirizzo IPv4, indirizzo IPv6, nome host) o tutte le interfacce (*) . Avviare il runtime usando la variabile di ambienteDOTNET_DiagnosticPorts
, connettendo il server TCP del router durante l'avvio.-rt, --runtime-timeout <runtimeTimeout>
Arresta automaticamente il router se nessun runtime si connette prima del timeout specificato (secondi). Se non specificato, il router non attiverà un arresto automatico.
-v, --verbose <verbose>
Abilita la registrazione dettagliata (debug|traccia).
-fp, --forward-port <forwardPort>
Abilita il port forwarding. I valori sono
Android
oiOS
perTcpClient
e soloAndroid
perTcpServer
. Assicurarsi di impostareANDROID_SDK_ROOT
prima di usare questa opzione in Android.
dotnet-dsrouter server-client
Avviare un server di diagnostica applicazioni .NET che instrada il server IPC locale e il server TCP remoto. Il router viene configurato usando un server IPC (collegandosi con strumenti di diagnostica) e un client TCP/IP (collegandosi al server TCP di runtime).
Riepilogo
dotnet-dsrouter server-client
[-ipcs|--ipc-server <ipcServer>]
[-tcpc|--tcp-client <tcpClient>]
[-rt|--runtime-timeout <timeout>]
[-v|--verbose <level>]
[-fp|--forward-port <platform>]
Opzioni
-ipcs, --ipc-server <ipcServer>
Indirizzo IPC del server di diagnostica da instradare. Il router accetta le connessioni IPC dagli strumenti di diagnostica che stabiliscono una nuova route tra il runtime e lo strumento di diagnostica. Se non specificato, il router userà il percorso del server di diagnostica IPC predefinito.
-tcpc, --tcp-client <tcpClient>
Indirizzo TCP/IP di runtime nel formato
[host]:[port]
. Il router può connettere127.0.0.1
,[::1]
, indirizzo IPv4, indirizzo IPv6, indirizzi hostname. Avviare il runtime usandoDOTNET_DiagnosticPorts
la variabile di ambiente per configurare il listener.-rt, --runtime-timeout <runtimeTimeout>
Arresta automaticamente il router se nessun runtime si connette prima del timeout specificato (secondi). Se non specificato, il router non attiverà un arresto automatico.
-v, --verbose <verbose>
Abilita la registrazione dettagliata (debug|traccia).
-fp, --forward-port <forwardPort>
Abilita il port forwarding. I valori sono
Android
oiOS
perTcpClient
e soloAndroid
perTcpServer
. Assicurarsi di impostareANDROID_SDK_ROOT
prima di usare questa opzione in Android.
dotnet-dsrouter client-client
Avviare un server di diagnostica applicazioni .NET che instrada il server IPC locale e il server TCP remoto. Il router viene configurato usando un client IPC (connessione del server IPC dello strumento di diagnostica) e un client TCP/IP (collegandosi al server TCP di runtime).
Riepilogo
dotnet-dsrouter client-client
[-ipcc|--ipc-client <ipcClient>]
[-tcpc|--tcp-client <tcpClient>]
[-rt|--runtime-timeout <timeout>]
[-v|--verbose <level>]
[-fp|--forward-port <platform>]
Opzioni
-ipcc, --ipc-client <ipcClient>
L'indirizzo IPC del server di diagnostica dello strumento di diagnostica (
--diagnostic-port argument
). Il router si connette al server IPC dello strumento di diagnostica quando si stabilisce una nuova route tra il runtime e lo strumento di diagnostica.-tcpc, --tcp-client <tcpClient>
Indirizzo TCP/IP di runtime nel formato
[host]:[port]
. Il router può connettere127.0.0.1
,[::1]
, indirizzo IPv4, indirizzo IPv6, indirizzi hostname. Avviare il runtime usando la variabile di ambienteDOTNET_DiagnosticPorts
per configurare listener.-rt, --runtime-timeout <runtimeTimeout>
Arresta automaticamente il router se nessun runtime si connette prima del timeout specificato (secondi). Se non specificato, il router non attiverà un arresto automatico.
-v, --verbose <verbose>
Abilita la registrazione dettagliata (debug|traccia).
-fp, --forward-port <forwardPort>
Abilita il port forwarding. I valori sono
Android
oiOS
perTcpClient
e soloAndroid
perTcpServer
. Assicurarsi di impostareANDROID_SDK_ROOT
prima di usare questa opzione in Android.
Raccogliere una traccia di avvio usando dotnet-trace da un'applicazione .NET in esecuzione in Android
A volte può essere utile raccogliere una traccia di un'applicazione dall'avvio. I passaggi seguenti illustrano il processo di destinazione di un'applicazione .NET in esecuzione in Android. Poiché dotnet-dsrouter
viene eseguito usando il port forwarding, lo stesso scenario funziona con le applicazioni in esecuzione in un emulatore locale e in un dispositivo fisico collegato tramite USB. Assicurarsi di impostare ANDROID_SDK_ROOT
prima di usare questa opzione o dotnet-dsrouter
non sarà in grado di trovare adb
la necessità di configurare il port forwarding.
Avviare dotnet-dsrouter in modalità server:Launch dotnet-dsrouter in server-mode:
dotnet-dsrouter server-server -ipcs ~/mylocalport -tcps 127.0.0.1:9000 --forward-port Android &
Impostare la
DOTNET_DiagnosticPorts
variabile ambiente usandoAndroidEnvironment
:Creare un file nella stessa directory del file con estensione .csproj usando un nome come
app.env
, aggiungere variabili di ambiente nel fileDOTNET_DiagnosticPorts=127.0.0.1:9000,suspend
e includere quanto segueItemGroup
in .csproj:<ItemGroup Condition="'$(AndroidEnableProfiler)'=='true'"> <AndroidEnvironment Include="app.env" /> </ItemGroup>
È anche possibile impostare
DOTNET_DiagnosticPorts
usandoadb shell setprop
:adb shell setprop debug.mono.profile '127.0.0.1:9000,suspend'
Compilare e avviare l'applicazione usando .NET Android SDK e abilitare la traccia passando
/p:AndroidEnableProfiler=true
a MSBuild. Poiché l'app è stata configurata per la sospensione all'avvio, si connetterà di nuovo aldotnet-dsrouter
listener TCP/IP in esecuzione su127.0.0.1:9000
e attenderà che gli strumenti di diagnostica si connettano prima di riprendere l'esecuzione dell'applicazione.Avviare
dotnet-trace
in modalità di raccolta, connettendosi aldotnet-dsrouter
server IPC, ~/mylocalport:dotnet-trace collect --diagnostic-port ~/mylocalport,connect
dotnet-trace
avvierà una sessione di traccia e riprenderà l'applicazione che continuerà a essere eseguita. Un flusso di eventi inizierà a fluire dall'applicazione per dispositivi mobili, attraverso dotnet-dsrouter
il dotnet-trace
file nettrace. Al termine della traccia, premere INVIO per assicurarsi che la sessione di traccia sia chiusa correttamente, assicurandosi che il file nettrace includa tutti i dati necessari prima che l'applicazione venga chiusa.
È possibile eseguire più sessioni di traccia sulla stessa applicazione in esecuzione nel corso del tempo, lasciare in dotnet-dsrouter
esecuzione e rieseguire dotnet-trace
quando è necessaria una nuova sessione di traccia.
dotnet-dsrouter
può essere lasciato in esecuzione in background e riutilizzato se un'applicazione è configurata per la connessione usando il relativo indirizzo e porta.
dotnet-dsrouter
è associato a un'applicazione in esecuzione in qualsiasi momento. Se è necessario tracciare più applicazioni diverse contemporaneamente, ogni applicazione deve usare la propria dotnet-dsrouter
istanza configurando una coppia di indirizzi IPC, TCP/IP univoca in dotnet-dsrouter
e configurando istanze diverse dell'applicazione per la connessione all'istanza univoca dotnet-dsrouter
.
Se dotnet-dsrouter
viene eseguito con --forward-port
destinazione Android e adb
server, emulatore o dispositivo viene riavviato, è necessario riavviare tutte le dotnet-dsrouter
istanze e ripristinare le regole di inoltro delle porte.
Al termine dell'uso di dotnet-dsrouter
, premere Q o CTRL + C per uscire dall'applicazione.
Nota
Quando dotnet-dsrouter
è in esecuzione in Windows, userà Named Pipes per il canale IPC. Sostituire ~/mylocalport con mylocalport negli esempi precedenti durante l'esecuzione in Windows.
Nota
La porta TCP/IP 9000 è solo un esempio. È possibile usare qualsiasi porta TCP/IP gratuita.
Nota
Socket di dominio Unix ~/mylocalport è solo un esempio. È possibile usare qualsiasi percorso di file Free Unix Domain Socket.
Raccogliere una traccia di avvio usando dotnet-trace da un'applicazione .NET in esecuzione in Android
Se non è necessario raccogliere una traccia durante l'avvio dell'applicazione, è possibile avviare l'applicazione in modalità nosuspend
, ovvero il runtime non si blocca all'avvio in attesa della connessione degli strumenti di diagnostica prima di riprendere l'esecuzione. La maggior parte dello scenario descritto sopra si applica anche a questa modalità, semplicemente sostituire suspend
con nosuspend
in variabile di ambiente DOTNET_DiagnosticPorts
per avviare l'applicazione in modalità nosuspend
.