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-dsrouterpacchetto 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 ambiente DOTNET_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 o iOS per TcpClient e solo Android per TcpServer. Assicurarsi di impostare ANDROID_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 ambiente DOTNET_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 o iOS per TcpClient e solo Android per TcpServer. Assicurarsi di impostare ANDROID_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ò connettere 127.0.0.1, [::1], indirizzo IPv4, indirizzo IPv6, indirizzi hostname. Avviare il runtime usando DOTNET_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 o iOS per TcpClient e solo Android per TcpServer. Assicurarsi di impostare ANDROID_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ò connettere 127.0.0.1, [::1], indirizzo IPv4, indirizzo IPv6, indirizzi hostname. Avviare il runtime usando la variabile di ambiente DOTNET_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 o iOS per TcpClient e solo Android per TcpServer. Assicurarsi di impostare ANDROID_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 usando AndroidEnvironment:

    Creare un file nella stessa directory del file con estensione .csproj usando un nome come app.env, aggiungere variabili di ambiente nel file DOTNET_DiagnosticPorts=127.0.0.1:9000,suspend e includere quanto segue ItemGroup in .csproj:

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

    È anche possibile impostare DOTNET_DiagnosticPorts usando adb 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 al dotnet-dsrouterlistener TCP/IP in esecuzione su 127.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 al dotnet-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.

Vedi anche