Поделиться через


dotnet-dsrouter

Эта статья относится к: ✔️ пакету SDK для .NET 6.0 и более поздних версий

Установка

Чтобы установить последнюю версию пакета NuGet dotnet-dsrouter, используйте команду dotnet tool install.

dotnet tool install --global dotnet-dsrouter

Краткие сведения

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

Description

dotnet-dsrouter подключает средства диагностики, такие как dotnet-trace и dotnet-counters к приложениям .NET, работающим в Android, iOS и tvOS в качестве эмулятора, симулятора или на самом устройстве. Средства диагностики выполняют локальный внутрипроцессный обмен данными (IPC) (именованный канал, сокет домена Unix) для подключения к среде выполнения .NET и взаимодействия с ней. Приложениям .NET, работающим в изолированных средах в эмуляторах, симуляторах и устройствах, требуются альтернативные способы обмена данными. dotnet-dsrouter внедряется между существующими средствами диагностики и мобильными приложениями .NET для создания локального представления приложения. dotnet-dsrouter позволяет средствам диагностики взаимодействовать с удаленной средой выполнения .NET, как при выполнении на локальном компьютере.

Обмен данными между средствами диагностики и dotnet-dsrouter осуществляется с помощью того же процесса IPC (именованный канал, сокет домена Unix), который используется при подключении к локальной среде выполнения .NET. dotnet-dsrouter использует TCP/IP для взаимодействия с удаленной средой выполнения .NET и поддерживает несколько разных сценариев подключения с учетом разных требований разных платформ. dotnet-dsrouter также реализует дополнительную поддержку, чтобы упросить настройку подключения при работе в эмуляторе, симуляторе и на физическом устройстве с подключением через USB.

Примечание.

dotnet-dsrouter используется для разработки и тестирования, поэтому настоятельно рекомендуется запускать dotnet-dsrouter через интерфейс с возвратом цикла (например, 127.0.0.1, [::1]). Функции подключения и возможности переадресации портов dotnet-dsrouter поддерживают все сценарии с использованием локального эмулятора, симулятора или физического устройства с подключением через USB.

Предупреждение

Выполнять привязку конечной точки TCP-сервера к чему-либо, кроме интерфейса с возвратом цикла (localhost, 127.0.0.1 или [::1]), не рекомендуется. Любые подключения к конечной точке TCP-сервера не будут проходить проверку подлинности и не будут шифроваться. dotnet-dsrouter используется в разработке с запуском только в средах разработки и тестирования.

Особенности использования dotnet-dsrouter вместе с мобильными приложениями определяются в документации по соответствующим пакетам SDK для .NET. Этот документ будет включать только несколько примеров того, как запускать средства диагностики для приложения .NET, работающего в Android. Подробные сведения о конфигурации и сценариях см. в статье, посвященной диагностической трассировке.

Параметры

  • -?|-h|--help

    Отображение справки в командной строке.

  • --version

    Отображает версию программы dotnet-dsrouter.

Команды

Команда
dotnet-dsrouter client-server
dotnet-dsrouter server-server
dotnet-dsrouter server-client
dotnet-dsrouter client-client

dotnet-dsrouter client-server

Запустите сервер диагностики приложения .NET с маршрутизацией локального IPC-сервера и удаленного TCP-клиента. Маршрутизатор настраивается с использованием IPC-клиента (с подключением IPC-сервера средства диагностики) и сервера TCP/IP (с приемом TCP-клиента среды выполнения).

Краткие сведения

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

Параметры

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

    Указывает средство диагностики диагностика адрес IPC сервера (--diagnostic-portаргумент). Маршрутизатор подключается к серверу IPC средства диагностики при установке нового маршрута между средой выполнения и средством диагностики.

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

    Указывает TCP/IP-адрес маршрутизатора с помощью формата [host]:[port]. Маршрутизатор может привязать один (127.0.0.1, [::1], 0.0.0.0, [::], IPv4-адрес, IPv6-адрес, имя хоста) или все (*) интерфейсы. Запускает среду выполнения с помощью переменной DOTNET_DiagnosticPorts среды и подключает TCP-сервер маршрутизатора во время запуска.

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

    Автоматически завершает работу маршрутизатора, если среда выполнения не подключается к ней до указанного времени ожидания (в секундах). Если не указано, маршрутизатор не будет активировать автоматическое завершение работы.

  • -v, --verbose <verbose>

    Включает подробное ведение журнала (отладка|trace).

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

    Включает переадресацию портов. Значения имеют Android значение или iOS TcpClientAndroid только для TcpServer. Обязательно задайте ANDROID_SDK_ROOT перед использованием этого параметра в Android.

dotnet-dsrouter server-server

Запустите сервер диагностики приложений .NET с маршрутизацией локального IPC-клиента и удаленного TCP-клиента. Маршрутизатор настраивается с использованием IPC-сервера (с подключением к средствам диагностики) и сервера TCP/IP (с приемом TCP-клиента среды выполнения).

Краткие сведения

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

Параметры

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

    Адрес IPC сервера диагностика для маршрутизации. Маршрутизатор принимает IPC-подключения от средств диагностики с установкой нового маршрута между средой выполнения и средством диагностики. Если это не указано, маршрутизатор будет использовать путь к серверу по умолчанию диагностика IPC.

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

    TCP/IP-адрес маршрутизатора в формате [host]:[port]. Маршрутизатор может привязать один (127.0.0.1, [::1], 0.0.0.0, [::], IPv4-адрес, IPv6-адрес, имя хоста) или все (*) интерфейсы. Запустите среду выполнения, используя переменную среды DOTNET_DiagnosticPorts с подключением TCP-сервера маршрутизатора во время запуска.

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

    Автоматически завершает работу маршрутизатора, если среда выполнения не подключается к ней до указанного времени ожидания (в секундах). Если не указано, маршрутизатор не будет активировать автоматическое завершение работы.

  • -v, --verbose <verbose>

    Включает подробное ведение журнала (отладка|trace).

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

    Включает переадресацию портов. Значения имеют Android значение или iOS TcpClientAndroid только для TcpServer. Обязательно задайте ANDROID_SDK_ROOT перед использованием этого параметра в Android.

dotnet-dsrouter server-client

Запустите сервер диагностики приложений .NET с маршрутизацией локального IPC-клиента и удаленного TCP-сервера. Маршрутизатор настраивается с использованием IPC-сервера (с подключением к средствам диагностики) и TCP/IP-клиента (с подключением TCP-сервера среды выполнения).

Краткие сведения

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

Параметры

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

    Адрес IPC сервера диагностика для маршрутизации. Маршрутизатор принимает подключения IPC из средств диагностики, устанавливающих новый маршрут между средой выполнения и средством диагностики. Если это не указано, маршрутизатор будет использовать путь к серверу по умолчанию диагностика IPC.

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

    TCP/IP-адрес среды выполнения в формате [host]:[port]. Маршрутизатор может подключить 127.0.0.1, [::1], IPv4-адрес, IPv6-адрес, имя хоста. Запустите среду выполнения с помощью DOTNET_DiagnosticPorts переменной среды для настройки прослушивателя.

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

    Автоматически завершает работу маршрутизатора, если среда выполнения не подключается к ней до указанного времени ожидания (в секундах). Если не указано, маршрутизатор не будет активировать автоматическое завершение работы.

  • -v, --verbose <verbose>

    Включает подробное ведение журнала (отладка|trace).

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

    Включает переадресацию портов. Значения имеют Android значение или iOS TcpClientAndroid только для TcpServer. Обязательно задайте ANDROID_SDK_ROOT перед использованием этого параметра в Android.

dotnet-dsrouter client-client

Запустите сервер диагностики приложения .NET с маршрутизацией локального IPC-сервера и удаленного TCP-сервера. Маршрутизатор настраивается с использованием IPC-клиента (с подключением IPC-сервера средства диагностики) и TCP/IP-клиента (с подключением TCP-сервера среды выполнения).

Краткие сведения

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

Параметры

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

    Средство диагностики диагностика адрес IPC сервера (--diagnostic-port argument). Маршрутизатор подключается к серверу IPC средства диагностики при установке нового маршрута между средой выполнения и средством диагностики.

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

    TCP/IP-адрес среды выполнения в формате [host]:[port]. Маршрутизатор может подключить 127.0.0.1, [::1], IPv4-адрес, IPv6-адрес, имя хоста. Запустите среду выполнения с помощью DOTNET_DiagnosticPorts переменной среды для настройки прослушивателя.

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

    Автоматически завершает работу маршрутизатора, если среда выполнения не подключается к ней до указанного времени ожидания (в секундах). Если не указано, маршрутизатор не будет активировать автоматическое завершение работы.

  • -v, --verbose <verbose>

    Включает подробное ведение журнала (отладка|trace).

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

    Включает переадресацию портов. Значения имеют Android значение или iOS TcpClientAndroid только для TcpServer. Обязательно задайте ANDROID_SDK_ROOT перед использованием этого параметра в Android.

Сбор трассировки при запуске с помощью dotnet-trace из приложения .NET, работающего в Android

Иногда бывает полезно получить трассировку приложения с момента его запуска. Ниже показано, как выполнить эту процедуру для приложения .NET, работающего в Android. Так как dotnet-dsrouter запускается с использованием переадресации портов, тот же сценарий поддерживается для приложений, работающих в локальном эмуляторе и на физическом устройстве с подключением через USB. Не забудьте установить ANDROID_SDK_ROOT перед использованием этого параметра или dotnet-dsrouter не сможете найти adb необходимые для настройки перенаправления портов.

  • Запустите dotnet-dsrouter в режиме"сервер — сервер":

    dotnet-dsrouter server-server -ipcs ~/mylocalport -tcps 127.0.0.1:9000 --forward-port Android &
    
  • Задайте переменную среды DOTNET_DiagnosticPorts, используя AndroidEnvironment:

    Создайте файл в том же каталоге, что и .csproj, используя такое имя, как app.env, добавьте переменные среды в файл DOTNET_DiagnosticPorts=127.0.0.1:9000,suspend и включите ItemGroup в .csproj:

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

    Также можно задать DOTNET_DiagnosticPorts, используя adb shell setprop:

    adb shell setprop debug.mono.profile '127.0.0.1:9000,suspend'
    
  • Создайте и запустите приложение с помощью пакета SDK для Android для .NET и включите трассировку, передав /p:AndroidEnableProfiler=true в MSBuild. Так как приложение настроено приостанавливать работу при запуске, оно снова подключится к запущенному прослушивателю TCP/IP dotnet-dsrouter, работающему в 127.0.0.1:9000, и будет ждать подключения средств диагностики, прежде чем возобновлять работу.

  • Запустите dotnet-trace в режиме сбора с подключением к IPC-серверу dotnet-dsrouter (~/mylocalport):

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

dotnet-trace запустит сеанс трассировки и возобновит работу приложения. Поток событий начнет передаваться из мобильного приложения через dotnet-dsrouter в файл nettrace dotnet-trace. По завершении сбора трассировки нажмите клавишу ВВОД, чтобы убедиться, что сеанс трассировки правильно закрыт. Так в файл nettrace будут включены все необходимые данные, прежде чем приложение будет закрыто.

С течением времени можно запустить несколько сеансов трассировки для одного и того же работающего приложения, оставьте dotnet-dsrouter выполнение и повторное выполнение dotnet-trace при необходимости нового сеанса трассировки.

dotnet-dsrouter можно оставить работать в фоновом режиме и использовать повторно, если приложение настроено выполнять подключение с использованием его адреса и порта.

dotnet-dsrouter привязывается к одному запущенному приложению в любое время. Если есть необходимость отслеживать несколько разных приложений одновременно, каждое приложение должно использовать свой собственный экземпляр dotnet-dsrouter. Для этого задайте уникальное значение IPC и пары TCP/IP-адресов в dotnet-dsrouter, а также настройте разные экземпляры приложения для обратного подключения к уникальному экземпляру dotnet-dsrouter.

Если dotnet-dsrouter выполняется с --forward-port использованием Android и adb сервера, эмулятора или устройства перезапускается, все dotnet-dsrouter экземпляры необходимо перезапустить, а также восстановить правила перенаправления портов.

По завершении использования dotnet-dsrouter нажмите клавишу Q или клавиши CTRL + C, чтобы выйти из приложения.

Примечание.

Если dotnet-dsrouter запускается в Windows, для соответствующего IPC-канала будут использоваться именованные каналы. Измените ~/mylocalport на mylocalport в примерах выше при запуске в Windows.

Примечание.

TCP/IP-порт 9000 используется для примера. Можно использовать любой свободный TCP/IP-порт.

Примечание.

Сокет домена UNIX ~/mylocalport используется для примера. Можно использовать любой свободный путь к файлу сокета домена UNIX.

Сбор трассировки с помощью dotnet-trace из приложения .NET, работающего в Android

Если во время запуска приложения нет необходимости собирать трассировку, можно запустить приложение в nosuspend режиме, то есть среда выполнения не блокируется при запуске, ожидая подключения средств диагностики перед возобновлением выполнения. Большая часть описанного выше сценария применима и к этому режиму. Просто измените suspend на nosuspend в переменной среды DOTNET_DiagnosticPorts, чтобы запустить приложение в режиме nosuspend.

См. также