dotnet-dsrouter

Este artículo se aplica a: ✔️ SDK de .NET 6.0 y versiones posteriores

Instalar

Para instalar la versión de lanzamiento más reciente del paquete NuGet de dotnet-dsrouter, use el comando dotnet tool install:

dotnet tool install --global dotnet-dsrouter

Sinopsis

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

Descripción

dotnet-dsrouter conecta herramientas de diagnóstico como dotnet-trace y dotnet-counters a aplicaciones .NET que se ejecutan en Android, iOS y tvOS, independientemente de si se ejecutan como emulador, simulador o en el propio dispositivo. Las herramientas de diagnóstico usan la comunicación entre procesos (IPC) local (canalización con nombre, socket de dominio de Unix) para conectarse y comunicarse con un entorno de ejecución de .NET. Las aplicaciones .NET que se ejecutan en entornos de espacio aislado en emuladores, simuladores y dispositivos necesitan formas alternativas de comunicarse. dotnet-dsrouter se inserta entre las herramientas de diagnóstico existentes y las aplicaciones móviles de .NET y crea una representación local de la aplicación. dotnet-dsrouter permite que las herramientas de diagnóstico se comuniquen con un entorno de ejecución remoto de .NET como si se hubiera estado ejecutando en la máquina local.

La comunicación entre las herramientas de diagnóstico y dotnet-dsrouter usa el mismo IPC (canalización con nombre, socket de dominio de Unix) que se usa al conectarse con un entorno de ejecución de .NET local. dotnet-dsrouter usa TCP/IP en su comunicación con el entorno de ejecución remoto de .NET y admite varios escenarios de conectividad diferentes para controlar las diferentes necesidades y requisitos que usan las distintas plataformas. dotnet-dsrouter también implementa compatibilidad adicional para simplificar la configuración de conectividad cuando se ejecuta en el emulador, el simulador y en un dispositivo físico conectado a través de USB.

Nota:

dotnet-dsrouter está pensado para desarrollo y pruebas y se recomienda encarecidamente ejecutar dotnet-dsrouter sobre la interfaz de bucle invertido (por ejemplo, 127.0.0.1, [::1]). Las características de conectividad y las funcionalidades de reenvío de puertos de dotnet-dsrouter controla todos los escenarios mediante el emulador local, el simulador o el dispositivo físico conectado a través de USB.

Advertencia

No se recomienda enlazar el punto de conexión del servidor TCP a nada excepto la interfaz de bucle invertido (localhost, 127.0.0.1 o [::1]). Las conexiones hacia el punto de conexión de servidor TCP estarán sin autenticar y sin cifrar. dotnet-dsrouter está diseñado para su uso en el desarrollo y solo debe ejecutarse en entornos de desarrollo y pruebas.

El uso detallado de dotnet-dsrouter junto con las aplicaciones móviles se describe mediante los respectivos SDK de .NET. Este documento solo incluirá un par de ejemplos sobre cómo ejecutar herramientas de diagnóstico en aplicaciones .NET que se ejecutan en Android. Para información detallada sobre la configuración y los escenarios, consulte Seguimiento de diagnósticos.

Opciones

  • -?|-h|--help

    Muestra la ayuda de la línea de comandos.

  • --version

    Muestra la versión del servicio dotnet-dsrouter.

Comandos

Comando
dotnet-dsrouter client-server
dotnet-dsrouter server-server
dotnet-dsrouter server-client
dotnet-dsrouter client-client

dotnet-dsrouter client-server

Inicie un servidor de diagnóstico de aplicaciones .NET que enrute el servidor IPC local y el cliente TCP remoto. El enrutador se configura mediante un cliente IPC (que conecta el servidor IPC de la herramienta de diagnóstico) y un servidor TCP/IP (que acepta el cliente TCP en tiempo de ejecución).

Sinopsis

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

Opciones

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

    Especifica la dirección IPC del servidor de diagnóstico de la herramienta de diagnóstico (argumento --diagnostic-port). El enrutador conecta el servidor IPC de la herramienta de diagnóstico al establecer una nueva ruta entre el entorno de ejecución y la herramienta de diagnóstico.

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

    Especifica la dirección TCP/IP del enrutador con el formato [host]:[port]. El enrutador puede enlazar una interfaz (127.0.0.1, [::1], 0.0.0.0, [::], dirección IPv4, dirección IPv6, nombre de host) o todas las interfaces (*). Inicia el entorno de ejecución mediante la variable de entorno DOTNET_DiagnosticPorts y conecta el servidor TCP del enrutador durante el inicio.

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

    Apaga automáticamente el enrutador si ningún entorno de ejecución se conecta a él antes del tiempo de espera especificado (segundos). Si no se especifica, el enrutador no desencadenará un apagado automático.

  • -v, --verbose <verbose>

    Habilita el registro detallado (debug|trace).

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

    Habilita el reenvío de puertos. Los valores son Android o iOS para TcpClient y solo Android para TcpServer. Asegúrese de establecer ANDROID_SDK_ROOT antes de usar esta opción en Android.

dotnet-dsrouter server-server

Inicie un servidor de diagnóstico de aplicaciones .NET que enrute el cliente IPC local y el cliente TCP remoto. El enrutador se configura mediante un servidor IPC (al que se conecta mediante herramientas de diagnóstico) y un servidor TCP/IP (que acepta el cliente TCP en tiempo de ejecución).

Sinopsis

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

Opciones

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

    : la dirección IPC del servidor de diagnóstico que se enruta. El enrutador acepta conexiones IPC de herramientas de diagnóstico que establecen una nueva ruta entre el entorno de ejecución y la herramienta de diagnóstico. Si no se especifica, el enrutador usará la ruta de acceso predeterminada del servidor de diagnóstico de IPC.

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

    Dirección TCP/IP del enrutador con el formato [host]:[port]. El enrutador puede enlazar una interfaz (127.0.0.1, [::1], 0.0.0.0, [::], dirección IPv4, dirección IPv6, nombre de host) o todas las interfaces (*). Inicie el entorno de ejecución mediante la variable de entorno DOTNET_DiagnosticPorts, que conecta el servidor TCP del enrutador durante el inicio.

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

    Apaga automáticamente el enrutador si ningún entorno de ejecución se conecta a él antes del tiempo de espera especificado (segundos). Si no se especifica, el enrutador no desencadenará un apagado automático.

  • -v, --verbose <verbose>

    Habilita el registro detallado (debug|trace).

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

    Habilita el reenvío de puertos. Los valores son Android o iOS para TcpClient y solo Android para TcpServer. Asegúrese de establecer ANDROID_SDK_ROOT antes de usar esta opción en Android.

dotnet-dsrouter server-client

Inicie un servidor de diagnóstico de aplicaciones .NET que enrute el cliente IPC local y el servidor TCP remoto. El enrutador se configura mediante un servidor IPC (al que se conecta mediante herramientas de diagnóstico) y un cliente TCP/IP (que conecta el servidor TCP en tiempo de ejecución).

Sinopsis

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

Opciones

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

    : la dirección IPC del servidor de diagnóstico que se enruta. El enrutador acepta conexiones IPC de herramientas de diagnóstico que establecen una nueva ruta entre el entorno de ejecución y la herramienta de diagnóstico. Si no se especifica, el enrutador usará la ruta de acceso predeterminada del servidor de diagnóstico de IPC.

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

    Dirección TCP/IP del entorno de ejecución con el formato [host]:[port]. El enrutador puede conectar 127.0.0.1, [::1], la dirección IPv4, la dirección IPv6 y las direcciones de nombre de host. Inicie el entorno de ejecución mediante la variable de entorno DOTNET_DiagnosticPorts para configurar el cliente de escucha.

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

    Apaga automáticamente el enrutador si ningún entorno de ejecución se conecta a él antes del tiempo de espera especificado (segundos). Si no se especifica, el enrutador no desencadenará un apagado automático.

  • -v, --verbose <verbose>

    Habilita el registro detallado (debug|trace).

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

    Habilita el reenvío de puertos. Los valores son Android o iOS para TcpClient y solo Android para TcpServer. Asegúrese de establecer ANDROID_SDK_ROOT antes de usar esta opción en Android.

dotnet-dsrouter client-client

Inicie un servidor de diagnóstico de aplicaciones .NET que enrute el servidor IPC local y el servidor TCP remoto. El enrutador se configura mediante un cliente IPC (que conecta el servidor IPC de la herramienta de diagnóstico) y un cliente TCP/IP (que conecta el servidor TCP en tiempo de ejecución).

Sinopsis

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

Opciones

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

    : la dirección IPC del servidor de diagnóstico de la herramienta de diagnóstico (--diagnostic-port argument). El enrutador conecta el servidor IPC de la herramienta de diagnóstico al establecer una nueva ruta entre el entorno de ejecución y la herramienta de diagnóstico.

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

    Dirección TCP/IP del entorno de ejecución con el formato [host]:[port]. El enrutador puede conectar 127.0.0.1, [::1], la dirección IPv4, la dirección IPv6 y las direcciones de nombre de host. Inicie el entorno de ejecución mediante la variable de entorno DOTNET_DiagnosticPorts para configurar el cliente de escucha.

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

    Apaga automáticamente el enrutador si ningún entorno de ejecución se conecta a él antes del tiempo de espera especificado (segundos). Si no se especifica, el enrutador no desencadenará un apagado automático.

  • -v, --verbose <verbose>

    Habilita el registro detallado (debug|trace).

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

    Habilita el reenvío de puertos. Los valores son Android o iOS para TcpClient y solo Android para TcpServer. Asegúrese de establecer ANDROID_SDK_ROOT antes de usar esta opción en Android.

Recopilación de un seguimiento de inicio mediante dotnet-trace desde una aplicación .NET que se ejecuta en Android

A veces puede ser útil recopilar un seguimiento de una aplicación desde su inicio. En los pasos siguientes se muestra el proceso de hacerlo siendo el destino una aplicación .NET que se ejecuta en Android. Puesto que dotnet-dsrouter se ejecuta mediante el reenvío de puertos, el mismo escenario funciona en aplicaciones que se ejecutan en un emulador local y en un dispositivo físico conectado a través de USB. Asegúrese de establecer ANDROID_SDK_ROOT antes de usar esta opción o dotnet-dsrouter no podrá encontrar el objeto adb necesario para configurar el reenvío de puertos.

  • Inicie dotnet-dsrouter en modo servidor-servidor:

    dotnet-dsrouter server-server -ipcs ~/mylocalport -tcps 127.0.0.1:9000 --forward-port Android &
    
  • Establezca la variable de entorno DOTNET_DiagnosticPorts con AndroidEnvironment:

    Cree un archivo en el mismo directorio que .csproj con un nombre como app.env, agregue variables de entorno al archivo, DOTNET_DiagnosticPorts=127.0.0.1:9000,suspend e incluya a continuación ItemGroup en .csproj:

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

    También es posible establecer DOTNET_DiagnosticPorts con adb shell setprop:

    adb shell setprop debug.mono.profile '127.0.0.1:9000,suspend'
    
  • Compile e inicie la aplicación mediante Android SDK de .NET y habilite el seguimiento pasando /p:AndroidEnableProfiler=true a MSBuild. Puesto que la aplicación se ha configurado para suspenderse durante el inicio, se conectará de nuevo al cliente de escucha TCP/IP dotnet-dsrouter que se ejecuta en 127.0.0.1:9000 y esperará a que las herramientas de diagnóstico se conecten antes de reanudar la ejecución de la aplicación.

  • Comience dotnet-trace en modo de recopilación y conéctese al servidor de IPC dotnet-dsrouter, ~/mylocalport:

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

dotnet-trace iniciará una sesión de seguimiento y reanudará la aplicación que ahora continuará ejecutándose. Una secuencia de eventos comenzará a fluir desde la aplicación móvil hasta dotnet-dsrouter en el archivo nettrace de dotnet-trace. Cuando haya terminado el seguimiento, presione Entrar para asegurarse de que la sesión de seguimiento está correctamente cerrada y asegúrese de que el archivo nettrace incluya todos los datos necesarios antes de que se cierre la aplicación.

Es posible ejecutar varias sesiones de seguimiento en la misma aplicación en ejecución a lo largo del tiempo, dejar dotnet-dsrouter en ejecución y volver a ejecutar dotnet-trace cuando se necesite una nueva sesión de seguimiento.

dotnet-dsrouter se puede dejar en ejecución en segundo plano y volverse a utilizar si una aplicación está configurada para conectarse mediante su dirección y puerto.

dotnet-dsrouter está vinculado a una aplicación en ejecución en cualquier momento. Si hay que hacer un seguimiento de varias aplicaciones diferentes al mismo tiempo, cada aplicación debe usar su propia instancia de dotnet-dsrouter; para ello, configure un par de direcciones IPC, TCP/IP único en dotnet-dsrouter y configure distintas instancias de aplicación para volver a conectarse a su instancia de dotnet-dsrouter única.

Si se ejecuta dotnet-dsrouter con --forward-port dirigido a Android y se reinicia el servidor, el emulador o el dispositivo adb, todas las instancias de dotnet-dsrouter deben reiniciarse también para restaurar las reglas de reenvío de puertos.

Cuando se hace con dotnet-dsrouter, presione Q o Ctrl + C para salir de la aplicación.

Nota:

Cuando se ejecuta dotnet-dsrouter en Windows, se usarán canalizaciones con nombre para su canal IPC. Reemplace ~/mylocalport por mylocalport en los ejemplos anteriores cuando se ejecuten en Windows.

Nota:

El puerto TCP/IP 9000 es solo un ejemplo. Se puede usar cualquier puerto TCP/IP libre.

Nota:

El socket de dominio de Unix ~/mylocalport es solo un ejemplo. Se puede usar cualquier ruta de acceso de archivo de socket de dominio Unix libre.

Recopilación de un seguimiento mediante dotnet-trace desde una aplicación .NET que se ejecuta en Android

Si no es necesario recopilar un seguimiento durante el inicio de la aplicación, es posible iniciar la aplicación en modo nosuspend, lo que significa que el entorno de ejecución no se bloqueará durante el inicio a la espera de que las herramientas de diagnóstico se conecten antes de reanudar la ejecución. La mayoría del escenario descrito anteriormente también se aplica a este modo; solo tiene que reemplazar suspend por nosuspend en la variable de entorno DOTNET_DiagnosticPorts para iniciar la aplicación en modo nosuspend.

Vea también