Cómo inicializar un depurador personalizado en plataformas móviles

Los depuradores de .NET personalizados normalmente se hospedan en un proceso independiente. Las plataformas móviles restringen o prohíben la creación de estos procesos, por lo que el componente del depurador personalizado del lado de destino debe cargarse en su lugar en el proceso de aplicación.

Este artículo solo se aplica a la inicialización del depurador en plataformas móviles (iOS y Android) en .NET 11 y versiones posteriores. No se aplica a NativeAOT.

Implementar y desplegar el componente del lado de destino

El componente depurador de destino debe implementarse como una biblioteca dinámica de generación de perfiles con un punto de entrada DllGetClassObject. Para ver implementaciones de ejemplo, consulte los ejemplos de generador de perfiles de .NET.

Debe implementarse junto con bibliotecas dinámicas libmscordbi y libmscordaccore como parte de la aplicación conforme a los requisitos de empaquetado, firma de código y carga de la biblioteca nativa de la plataforma de destino.

Cargar el componente del lado de destino en el inicio

Para que CoreCLR cargue el componente como generador de perfiles, proporcione la siguiente configuración de entorno antes de que se inicie el tiempo de ejecución:

Variable del entorno Value
DOTNET_ENABLE_PROFILING 1
DOTNET_PROFILER {<profiler-CLSID>}
DOTNET_PROFILER_PATH <component-path>

Sustituye <profiler-CLSID> por el GUID del generador de perfiles de tu componente y mantén las llaves que lo encierran. Reemplace por <component-path> la ruta de acceso al componente nativo en la implementación de la aplicación de destino.

Para más información sobre esta configuración, consulte Opciones de configuración en tiempo de ejecución para depurar y generar perfiles.

Use la configuración de inicio de la aplicación de la plataforma para proporcionar esta configuración.

Note

Aunque este procedimiento usa el mecanismo del generador de perfiles para inicializar un depurador, no establece compatibilidad de uso general con generadores de perfiles de terceros en plataformas móviles.

Creación de la interfaz del depurador

En el componente del lado de destino, realice la inicialización siguiente:

  1. Cargue libmscordbi la biblioteca dinámica y llame a su CoreCLRCreateCordbObjectEx exportación. Consulte el objeto devuelto para ICorDebug.
  2. Llame a ICorDebug::Initialize y registre el controlador de eventos administrados con ICorDebug::SetManagedHandler.
  3. Adjúntese a la aplicación mediante ICorDebug::DebugActiveProcess.

Para evitar perderse eventos tempranos de carga de módulos y de inicio, coordine la conexión con el inicio del entorno de ejecución para que la ejecución administrada no continúe antes de que se complete DebugActiveProcess.

Después de la inicialización, use las interfaces de depuración ICorDebug igual que en otras plataformas Unix.