dotnet-dsrouter
Dieser Artikel gilt für: ✔️ .NET 6.0 SDK und höhere Versionen
Installieren
Verwenden Sie zum Installieren der neuesten Releaseversion des NuGet-Pakets dotnet-dsrouter
den Befehl dotnet tool install:
dotnet tool install --global dotnet-dsrouter
Übersicht
dotnet-dsrouter [-?, -h, --help] [--version] <command>
Beschreibung
dotnet-dsrouter
verbindet Diagnosetools wie dotnet-trace
und dotnet-counters
mit .NET-Anwendungen, die unter Android, iOS und tvOS ausgeführt werden, unabhängig davon, ob sie als Emulator, Simulator oder auf dem Gerät selbst ausgeführt werden. Diagnosetools verwenden die lokale Kommunikation zwischen Prozessen (IPC) (Named Pipe, Unix Domain Socket), um eine Verbindung mit einer .NET-Runtime herzustellen und mit ihr zu kommunizieren. .NET-Anwendungen, die in Sandboxumgebungen auf Emulatoren, Simulatoren und Geräten ausgeführt werden, benötigen alternative Kommunikationsmöglichkeiten. dotnet-dsrouter
fügt sich selbst zwischen vorhandenen Diagnosetools und mobilen .NET-Anwendungen ein und erstellt eine lokale Darstellung der Anwendung. dotnet-dsrouter
ermöglicht Diagnosetools die Kommunikation mit einer .NET-Remoteruntime, als ob diese auf dem lokalen Computer ausgeführt würde.
Die Kommunikation zwischen Diagnosetools und dotnet-dsrouter
verwendet die gleiche IPC (Named Pipe, Unix Domain Socket), die beim Herstellen einer Verbindung mit einer lokalen .NET-Runtime verwendet wird. dotnet-dsrouter
verwendet TCP/IP in der Kommunikation mit der .NET-Remoteruntime und unterstützt verschiedene Konnektivitätsszenarien, um verschiedene Anforderungen zu erfüllen, die von verschiedenen Plattformen gestellt werden. dotnet-dsrouter
implementiert außerdem zusätzliche Unterstützung, um die Konnektivitätskonfiguration zu vereinfachen, wenn die Ausführung in einem Emulator, in einem Simulator bzw. auf einem physischen Gerät erfolgt, das über USB angeschlossen ist.
Hinweis
dotnet-dsrouter
ist für Entwicklung und Tests vorgesehen, und es wird dringend empfohlen, dotnet-dsrouter
über eine Loopbackschnittstelle (z. B. 127.0.0.1
, [::1]
) auszuführen. Die Konnektivitätsfeatures und Portweiterleitungsfunktionen von dotnet-dsrouter
verarbeiten alle Szenarien mit dem lokalen Emulator, Simulator oder physischen Gerät, das über USB verbunden ist.
Warnung
Das Binden des TCP-Serverendpunkts an etwas anderes außer der Loopbackschnittstelle (localhost
, 127.0.0.1
oder [::1]
) wird nicht empfohlen. Alle Verbindungen mit dem TCP-Serverendpunkt sind nicht authentifiziert und unverschlüsselt. dotnet-dsrouter
ist für die Entwicklung vorgesehen und sollte nur in Entwicklungs- und Testumgebungen ausgeführt werden.
Die detaillierte Verwendung von dotnet-dsrouter
zusammen mit mobilen Anwendungen wird in den jeweiligen .NET SDKs beschrieben. Dieses Dokument enthält nur einige Beispiele zum Ausführen von Diagnosetools für eine .NET-Anwendung, die unter Android ausgeführt wird. Ausführliche Informationen zu Konfiguration und Szenarien finden Sie unter Diagnoseablaufverfolgung.
Optionen
-?|-h|--help
Zeigt die Hilfe für die Befehlszeile an.
--version
Hiermit wird die Version des
dotnet-dsrouter
-Hilfsprogramms angezeigt.
Befehle
Befehl |
---|
dotnet-dsrouter client-server |
dotnet-dsrouter server-server |
dotnet-dsrouter server-client |
dotnet-dsrouter client-client |
dotnet-dsrouter client-server
Startet einen .NET-Anwendungsdiagnoseserver, der den lokalen IPC-Server und den TCP-Remoteclient weiterleitet. Der Router wird mithilfe eines IPC-Clients (Verbindung mit dem IPC-Server des Diagnosetools) und eines TCP/IP-Servers (der den TCP-Laufzeitclient akzeptiert) konfiguriert.
Übersicht
dotnet-dsrouter client-server
[-ipcc|--ipc-client <ipcClient>]
[-tcps|--tcp-server <tcpServer>]
[-rt|--runtime-timeout <timeout>]
[-v|--verbose <level>]
[-fp|--forward-port <platform>]
Optionen
-ipcc, --ipc-client <ipcClient>
Gibt die IPC-Adresse des Diagnoseservers des Diagnosetools an (
--diagnostic-port
-Argument). Der Router stellt eine Verbindung mit dem IPC-Server des Diagnosetools her, wenn eine neue Route zwischen Runtime und Diagnosetool eingerichtet wird.-tcps, --tcp-server <tcpServer>
Gibt die TCP/IP-Adresse des Routers im Format
[host]:[port]
an. Der Router kann eine Schnittstelle (127.0.0.1
,[::1]
,0.0.0.0
,[::]
, IPv4-Adresse, IPv6-Adresse, Hostname) oder alle Schnittstellen (*) binden. Startet die Runtime unter Verwendung der UmgebungsvariableDOTNET_DiagnosticPorts
und stellt während des Starts eine Verbindung mit dem TCP-Server des Routers her.-rt, --runtime-timeout <runtimeTimeout>
Fährt den Router automatisch herunter, wenn vor Ablauf des angegebenen Timeouts (Sekunden) keine Runtime eine Verbindung herstellt. Wenn keine Angabe erfolgt, löst der Router kein automatisches Herunterfahren aus.
-v, --verbose <verbose>
Aktiviert die ausführliche Protokollierung (debug|trace).
-fp, --forward-port <forwardPort>
Aktiviert die Portweiterleitung. Die Werte lauten
Android
oderiOS
fürTcpClient
und nurAndroid
fürTcpServer
. Stellen Sie sicher, dass SieANDROID_SDK_ROOT
festlegen, bevor Sie diese Option unter Android verwenden.
dotnet-dsrouter server-server
Startet einen .NET-Anwendungsdiagnoseserver, der den lokalen IPC-Client und den TCP-Remoteclient weiterleitet. Der Router wird mithilfe eines IPC-Servers (Verbindung über Diagnosetools) und eines TCP/IP-Servers (der den TCP-Laufzeitclient akzeptiert) konfiguriert.
Übersicht
dotnet-dsrouter server-server
[-ipcs|--ipc-server <ipcServer>]
[-tcps|--tcp-server <tcpServer>]
[-rt|--runtime-timeout <timeout>]
[-v|--verbose <level>]
[-fp|--forward-port <platform>]
Optionen
-ipcs, --ipc-server <ipcServer>
: Die weiterzuleitende IPC-Adresse des Diagnoseservers. Der Router akzeptiert IPC-Verbindungen von Diagnosetools, die eine neue Route zwischen der Runtime und dem Diagnosetool einrichten. Wenn keine Werte angegeben werden, verwendet der Router den Standardpfad des IPC-Diagnoseservers.
-tcps, --tcp-server <tcpServer>
Die TCP/IP-Adresse des Routers im Format
[host]:[port]
. Der Router kann eine Schnittstelle (127.0.0.1
,[::1]
,0.0.0.0
,[::]
, IPv4-Adresse, IPv6-Adresse, Hostname) oder alle Schnittstellen (*) binden. Starten Sie die Runtime mithilfe der UmgebungsvariablenDOTNET_DiagnosticPorts
, und verbinden Sie den TCP-Routerserver während des Starts.-rt, --runtime-timeout <runtimeTimeout>
Fährt den Router automatisch herunter, wenn vor Ablauf des angegebenen Timeouts (Sekunden) keine Runtime eine Verbindung herstellt. Wenn keine Angabe erfolgt, löst der Router kein automatisches Herunterfahren aus.
-v, --verbose <verbose>
Aktiviert die ausführliche Protokollierung (debug|trace).
-fp, --forward-port <forwardPort>
Aktiviert die Portweiterleitung. Die Werte lauten
Android
oderiOS
fürTcpClient
und nurAndroid
fürTcpServer
. Stellen Sie sicher, dass SieANDROID_SDK_ROOT
festlegen, bevor Sie diese Option unter Android verwenden.
dotnet-dsrouter server-client
Startet einen .NET-Anwendungsdiagnoseserver, der den lokalen IPC-Client und den TCP-Remoteserver weiterleitet. Der Router wird mithilfe eines IPC-Servers (Verbindung über Diagnosetools) und eines TCP/IP-Clients (Verbindung mit dem TCP-Laufzeitserver) konfiguriert.
Übersicht
dotnet-dsrouter server-client
[-ipcs|--ipc-server <ipcServer>]
[-tcpc|--tcp-client <tcpClient>]
[-rt|--runtime-timeout <timeout>]
[-v|--verbose <level>]
[-fp|--forward-port <platform>]
Optionen
-ipcs, --ipc-server <ipcServer>
: Die weiterzuleitende IPC-Adresse des Diagnoseservers. Der Router akzeptiert IPC-Verbindungen von Diagnosetools, die eine neue Route zwischen der Runtime und dem Diagnosetool einrichten. Wenn keine Werte angegeben werden, verwendet der Router den Standardpfad des IPC-Diagnoseservers.
-tcpc, --tcp-client <tcpClient>
Die TCP/IP-Adresse der Runtime im Format
[host]:[port]
. Router können eine Verbindung mit127.0.0.1
,[::1]
, der IPv4-Adresse, der IPv6-Adresse und den Hostnamenadressen herstellen. Startet die Runtime mithilfe der UmgebungsvariableDOTNET_DiagnosticPorts
zum Einrichten des Listeners.-rt, --runtime-timeout <runtimeTimeout>
Fährt den Router automatisch herunter, wenn vor Ablauf des angegebenen Timeouts (Sekunden) keine Runtime eine Verbindung herstellt. Wenn keine Angabe erfolgt, löst der Router kein automatisches Herunterfahren aus.
-v, --verbose <verbose>
Aktiviert die ausführliche Protokollierung (debug|trace).
-fp, --forward-port <forwardPort>
Aktiviert die Portweiterleitung. Die Werte lauten
Android
oderiOS
fürTcpClient
und nurAndroid
fürTcpServer
. Stellen Sie sicher, dass SieANDROID_SDK_ROOT
festlegen, bevor Sie diese Option unter Android verwenden.
dotnet-dsrouter client-client
Startet einen .NET-Anwendungsdiagnoseserver, der den lokalen IPC-Server und den TCP-Remoteserver weiterleitet. Der Router wird mithilfe eines IPC-Clients (Verbindung mit dem IPC-Server des Diagnosetools) und eines TCP/IP-Clients (Verbindung mit dem TCP-Laufzeitserver) konfiguriert.
Übersicht
dotnet-dsrouter client-client
[-ipcc|--ipc-client <ipcClient>]
[-tcpc|--tcp-client <tcpClient>]
[-rt|--runtime-timeout <timeout>]
[-v|--verbose <level>]
[-fp|--forward-port <platform>]
Optionen
-ipcc, --ipc-client <ipcClient>
: Die IPC-Adresse des Diagnoseservers des Diagnosetools (
--diagnostic-port argument
). Der Router stellt eine Verbindung mit dem IPC-Server des Diagnosetools her, wenn eine neue Route zwischen Runtime und Diagnosetool eingerichtet wird.-tcpc, --tcp-client <tcpClient>
Die TCP/IP-Adresse der Runtime im Format
[host]:[port]
. Router können eine Verbindung mit127.0.0.1
,[::1]
, der IPv4-Adresse, der IPv6-Adresse und den Hostnamenadressen herstellen. Startet die Runtime mithilfe der UmgebungsvariableDOTNET_DiagnosticPorts
zum Einrichten des Listeners.-rt, --runtime-timeout <runtimeTimeout>
Fährt den Router automatisch herunter, wenn vor Ablauf des angegebenen Timeouts (Sekunden) keine Runtime eine Verbindung herstellt. Wenn keine Angabe erfolgt, löst der Router kein automatisches Herunterfahren aus.
-v, --verbose <verbose>
Aktiviert die ausführliche Protokollierung (debug|trace).
-fp, --forward-port <forwardPort>
Aktiviert die Portweiterleitung. Die Werte lauten
Android
oderiOS
fürTcpClient
und nurAndroid
fürTcpServer
. Stellen Sie sicher, dass SieANDROID_SDK_ROOT
festlegen, bevor Sie diese Option unter Android verwenden.
Erfassen einer Startablaufverfolgung mit dotnet-trace aus einer .NET-Anwendung, die unter Android ausgeführt wird
Manchmal kann es nützlich sein, eine Ablaufverfolgung einer Anwendung ab ihrem Start zu erfassen. Die folgenden Schritte veranschaulichen dies für eine .NET-Anwendung, die unter Android ausgeführt wird. Da dotnet-dsrouter
mithilfe von Portweiterleitung ausgeführt wird, funktioniert das gleiche Szenario für Anwendungen, die in einem lokalen Emulator und auf einem physischen Gerät ausgeführt werden, das über USB angeschlossen ist. Stellen Sie sicher, dass Sie ANDROID_SDK_ROOT
festlegen, bevor Sie diese Option verwenden. Andernfalls wird adb
zum Einrichten der Portweiterleitung von dotnet-dsrouter
nicht gefunden.
Starten Sie dotnet-dsrouter im server-server-Modus:
dotnet-dsrouter server-server -ipcs ~/mylocalport -tcps 127.0.0.1:9000 --forward-port Android &
Legen Sie die
DOTNET_DiagnosticPorts
-Umgebungsvariable mitAndroidEnvironment
fest:Erstellen Sie eine Datei im gleichen Verzeichnis wie die CSPROJ-Datei mit einem Namen wie
app.env
,DOTNET_DiagnosticPorts=127.0.0.1:9000,suspend
fügen Sie der Datei Umgebungsvariablen hinzu, und fügen Sie die folgendeItemGroup
in die CSPROJ-Datei ein:<ItemGroup Condition="'$(AndroidEnableProfiler)'=='true'"> <AndroidEnvironment Include="app.env" /> </ItemGroup>
Sie können auch
DOTNET_DiagnosticPorts
mitadb shell setprop
festlegen:adb shell setprop debug.mono.profile '127.0.0.1:9000,suspend'
Erstellen und starten Sie die Anwendung mit dem .NET Android SDK, und aktivieren Sie Ablaufverfolgung, indem Sie
/p:AndroidEnableProfiler=true
an MSBuild übergeben. Da die App so konfiguriert wurde, dass sie beim Start angehalten wird, stellt sie erneut eine Verbindung mit demdotnet-dsrouter
TCP/IP-Listener her, der unter127.0.0.1:9000
ausgeführt wird, und wartet, bis Diagnosetools eine Verbindung herstellen, bevor die Anwendungsausführung fortgesetzt wird.Starten Sie
dotnet-trace
im Erfassungsmodus, und stellen Sie eine Verbindung mit demdotnet-dsrouter
IPC-Server (~/mylocalport) her:dotnet-trace collect --diagnostic-port ~/mylocalport,connect
dotnet-trace
startet eine Ablaufverfolgungssitzung und setzt die Anwendung fort, die nun weiter ausgeführt wird. Ein Ereignisdatenstrom fließt von der mobilen Anwendung über dotnet-dsrouter
in die dotnet-trace
NETTRACE-Datei. Wenn die Ablaufverfolgung abgeschlossen ist, drücken Sie die EINGABETASTE, um sicherzustellen, dass die Ablaufverfolgungssitzung ordnungsgemäß geschlossen und sichergestellt wird, dass die NETTRACE-Datei alle erforderlichen Daten enthält, bevor die Anwendung geschlossen wird.
Es ist möglich, im Laufe der Zeit mehrere Ablaufverfolgungssitzungen für ein und dieselbe ausgeführte Anwendung auszuführen. Behalten Sie die Ausführung von dotnet-dsrouter
bei, und führen Sie dotnet-trace
erneut aus, wenn eine neue Ablaufverfolgungssitzung erforderlich ist.
dotnet-dsrouter
kann im Hintergrund weiterhin ausgeführt und wiederverwendet werden, wenn eine Anwendung so konfiguriert ist, dass eine Verbindung mithilfe der Adresse und des Ports herstellt.
dotnet-dsrouter
ist jederzeit an eine ausgeführte Anwendung gebunden. Wenn mehrere verschiedene Anwendungen gleichzeitig überwacht werden müssen, muss jede Anwendung eine eigene dotnet-dsrouter
-Instanz verwenden, indem ein eindeutiges IPC-TCP/IP-Adresspaar in dotnet-dsrouter
eingerichtet und verschiedene Anwendungsinstanzen konfiguriert werden, um eine Verbindung mit der eindeutigen dotnet-dsrouter
-Instanz herzustellen.
Wenn dotnet-dsrouter
mit --forward-port
für Android ausgeführt wird und adb
-Server, -Emulator oder -Gerät neu gestartet werden, müssen alle dotnet-dsrouter
-Instanzen ebenfalls neu gestartet werden, um die Portweiterleitungsregeln wiederherzustellen.
Wenn Sie mit der Verwendung von dotnet-dsrouter
fertig sind, drücken Sie Q oder STRG + C, um die Anwendung zu beenden.
Hinweis
Bei der Ausführung von dotnet-dsrouter
unter Windows werden Named Pipes für den IPC-Kanal verwendet. Ersetzen Sie ~/mylocalport in den Beispielen oben durch mylocalport, wenn die Ausführung unter Windows erfolgt.
Hinweis
TCP/IP-Port 9000 ist nur ein Beispiel. Es kann ein beliebiger freier TCP/IP-Port verwendet werden.
Hinweis
Unix Domain Socket ~/mylocalport ist nur ein Beispiel. Jeder freie Unix Domain Socket-Dateipfad kann verwendet werden.
Erfassen einer Ablaufverfolgung mit dotnet-trace aus einer .NET-Anwendung, die unter Android ausgeführt wird
Wenn während des Anwendungsstarts keine Ablaufverfolgung erfasst werden muss, ist es möglich, die Anwendung im nosuspend
-Modus zu starten. Das bedeutet, dass die Runtime beim Start nicht blockiert wird, weil sie darauf wartet, dass Diagnosetools eine Verbindung herstellen, bevor die Ausführung fortgesetzt wird. Der Großteil des oben beschriebenen Szenarios gilt auch für diesen Modus. Ersetzen Sie suspend
einfach durch nosuspend
in der DOTNET_DiagnosticPorts
-Umgebungsvariablen, um die Anwendung im nosuspend
-Modus zu starten.