Como inicializar um depurador personalizado em plataformas móveis

Os depuradores .NET personalizados são normalmente executados num processo separado. As plataformas móveis restringem ou proíbem a criação desses processos, pelo que o componente de depuração personalizado no lado de destino deve, em vez disso, ser carregado no processo da aplicação.

Este artigo aplica-se apenas à inicialização de depuradores em plataformas móveis (iOS e Android) em versões .NET 11 e posteriores. Não se aplica ao NativeAOT.

Desenvolver e implementar o componente do lado de destino

O componente de depuração do lado de destino deve ser implementado como uma biblioteca dinâmica de criação de perfil com ponto de entrada DllGetClassObject. Para exemplos de implementação, consulte os exemplos do criador de perfil do .NET.

Deve ser implementado em conjunto com as bibliotecas dinâmicas libmscordbi e libmscordaccore como parte da aplicação, em conformidade com os requisitos nativos de empacotamento, assinatura de código e carregamento da plataforma alvo.

Carregar o componente do lado de destino na inicialização

Para que o CoreCLR carregue o seu componente como profiler, forneça as seguintes definições de ambiente antes do início do runtime:

Variável de ambiente Value
DOTNET_ENABLE_PROFILING 1
DOTNET_PROFILER {<profiler-CLSID>}
DOTNET_PROFILER_PATH <component-path>

Substitua <profiler-CLSID> pelo GUID do criador de perfis do seu componente e mantenha as chavetas envolventes. Substitua <component-path> pelo caminho para o componente nativo na implementação da aplicação de destino.

Para detalhes sobre estas definições, consulte Opções de configuração em tempo de execução para depuração e perfil.

Use a configuração de lançamento da sua aplicação para fornecer estas definições.

Note

Embora este procedimento utilize o mecanismo do profiler para inicializar um depurador, não estabelece suporte de propósito geral para profilers de terceiros em plataformas móveis.

Criar a interface do depurador

No componente do lado do alvo, execute a seguinte inicialização:

  1. Carrega libmscordbi a biblioteca dinâmica e chama a exportação CoreCLRCreateCordbObjectEx . Consultar o objeto devolvido relativamente a ICorDebug.
  2. Chame ICorDebug::Initialize e registe o seu handler de eventos geridos com ICorDebug::SetManagedHandler.
  3. Anexe à aplicação com ICorDebug::D ebugActiveProcess.

Para não perder eventos iniciais de carregamento de módulos e de arranque, coordene a associação com a inicialização do runtime para que a execução gerida não prossiga antes de DebugActiveProcess estar concluído.

Após a inicialização, utilize as interfaces do depurador ICorDebug como nas outras plataformas Unix.