Compartilhar via


Depurando aplicativos Xamarin.iOS

Aplicativos Xamarin.iOS podem ser depurados com o depurador interno no Visual Studio para Mac ou no Visual Studio.

Use o suporte à depuração nativo do Visual Studio para Mac para depurar C# e outro código de linguagens gerenciadas e use LLDB quando precisar depurar código C, C++ ou Objective C que possa estar vinculando a seu projeto Xamarin.iOS.

Observação

Ao compilar aplicativos no modo de Depuração, o Xamarin.iOS gerará aplicativos muito maiores e mais lentos, uma vez que cada linha de código deve ser instrumentada. Antes de liberar, faça um build de Liberação.

O depurador do Xamarin.iOS é integrado ao IDE e permite que os desenvolvedores depurem aplicativos Xamarin.iOS criados com qualquer uma das linguagens gerenciadas com suporte no Xamarin.iOS no simulador e no dispositivo.

O depurador Xamarin.iOS usa o Depurador Flexível Mono, o que significa que o código gerado e o runtime Mono cooperam com o IDE para proporcionar uma experiência de depuração. Isso é diferente de depuradores rígidos, como LLDB ou MDB, que controlam um programa sem o conhecimento ou a cooperação do programa depurado.

Configuração de pontos de interrupção

Quando estiver pronto para iniciar a depuração de seu aplicativo, a primeira etapa é definir pontos de interrupção em seu aplicativo. Isso é feito clicando na área de margem do editor, ao lado do número de linha de código em que você deseja interromper:

Você pode exibir todos os pontos de interrupção que foram definidos em seu código acessando o painel Pontos de Interrupção:

O painel de Pontos de Interrupção

Se o painel Pontos de Interrupção não for exibido automaticamente, você poderá torná-lo visível selecionando Exibir > Pontos de Interrupção do Windows > de Depuração

Antes de iniciar a depuração de qualquer aplicativo, sempre garanta que a configuração esteja definida como Depurar, uma vez que isso contém um conjunto de ferramentas útil para dar suporte à depuração, como pontos de interrupção, uso de visualizadores de dados e exibição da pilha de chamadas:

Iniciar Depuração

Para iniciar a depuração, selecione o dispositivo de destino ou semelhante no IDE:

Em seguida, implante seu aplicativo pressionando o botão Reproduzir .

Quando você atingir um ponto de interrupção, o código será realçado em amarelo:

O código será realçado em amarelo

Ferramentas de depuração, como inspecionar os valores de objetos, podem ser usadas neste ponto para obter mais informações sobre o que está acontecendo em seu código:

Exibir um valor de cor

Pontos de interrupção condicionais

Você também pode definir regras para determinar as circunstâncias sob as quais um ponto de interrupção deve ocorrer; isso é conhecido como adicionar um ponto de interrupção condicional.

Para definir um ponto de interrupção condicional, acesse o janela Propriedades ponto de interrupção, que pode ser feito de duas maneiras:

  • Para adicionar um novo ponto de interrupção condicional, clique com o botão direito do mouse na margem do editor, à esquerda do número de linha para o código para o qual deseja definir um ponto de interrupção e selecione o novo ponto de interrupção:

    Selecionar Novo Ponto de Interrupção

  • Para adicionar uma condição a um ponto de interrupção existente, clique com o botão direito do mouse no ponto de interrupção e selecione Propriedades do Ponto de Interrupção ou, no Painel de Pontos de Interrupção , selecione o botão de propriedades ilustrado abaixo:

    O Painel de Pontos de Interrupção

Então você pode inserir a condição sob a qual você deseja que o ponto de interrupção ocorra:

Inserir a condição para o Ponto de interrupção ocorrer

Quando um ponto de interrupção for atingido, as ferramentas de depuração permitirão assumir o controle da execução do programa. O IDE exibirá quatro botões, permitindo que você execute e percorra o código.

No Visual Studio para Mac, eles terão a seguinte aparência:

As ferramentas de Depuração permitem que o desenvolvedor tenha controle da execução do programa

Eles são:

  • Executar/Parar – isso iniciará/interromperá a execução do código até o próximo ponto de interrupção.
  • Passo a passo – isso executará a próxima linha de código. Se a próxima linha for uma chamada de função, o passo a passo executará a função e será interrompido na próxima linha de código após a função.
  • Intervir – isso também executará a próxima linha de código. Se a próxima linha é uma chamada de função, Intervir parará na primeira linha da função, permitindo que você continue a depuração da função linha a linha. Se a próxima linha não for uma função, ela se comportará como Passar.
  • Sair – isso retornará à linha em que a função atual foi chamada.

Pontos de interrupção

É importante destacar que o iOS fornece aos aplicativos apenas alguns segundos (10) para a inicialização e conclusão do método FinishedLaunching no delegado do Aplicativo. Se o aplicativo não concluir esse método em 10 segundos, o iOS finalizará o processo.

Isso significa que é quase impossível definir pontos de interrupção no código de inicialização do programa. Se você quiser depurar seu código de inicialização, atrase parte da inicialização e coloque-a em um método invocado por temporizador ou em alguma outra forma de método de retorno de chamada que seja executado depois da conclusão de FinishedLaunching.

Diagnóstico do dispositivo

Se houver um erro ao configurar o depurador, você poderá habilitar o diagnóstico detalhado adicionando "-v -v -v" aos argumentos adicionais mtouch em suas Opções de Projeto. Isso imprimirá informações de erro detalhadas no console do dispositivo.

Depuração Sem Fio

O padrão no Xamarin.iOS é depurar seu aplicativo em dispositivos pela conexão USB. Às vezes, o dispositivo USB poderá ser necessário testar a conexão/desconexão do cabo para desenvolver aplicativos alimentados por ExternalAccessory. Nesses casos, você pode usar a depuração pela rede sem fio.

Para mais informações sobre Depuração e Implantação Sem Fio, consulte o guia Implantação Sem Fio.

Detalhes técnicos

O Xamarin.iOS usa o novo depurador flexível Mono. Diferente do depurador Mono padrão, que é um programa que controla um processo separado usando interfaces de sistema operacional, o depurador flexível funciona fazendo o runtime Mono expor a funcionalidade de depuração por meio de um protocolo de transmissão.

Na inicialização, um aplicativo a ser depurados contata o depurador e o depurador começa a operar. No Xamarin.iOS para Visual Studio, o Agente Mac do Xamarin atua como intermediário entre o aplicativo (Visual Studio) e o depurador.

Esse depurador flexível requer um esquema de depuração cooperativo quando está em execução no dispositivo. Isso significa que seus builds binários ao depurar serão maiores, uma vez que o código é instrumentado para conter código extra em cada ponto de sequência para dar suporte à depuração.

Acesso ao console

Logs de falha e a saída da classe Console serão enviados ao console do iPhone. Você pode acessar esse console com Xcode usando o “Organizador” e selecionando o dispositivo no organizador.

Como alternativa, se não desejar iniciar o Xcode, você poderá usar o Utilitário de Configuração do iPhone da Apple para acessar diretamente o console. Isso tem benefício adicional de poder acessar os logs do console usando um computador Windows se você estiver depurando um problema em campo.

Para usuários do Visual Studio, há alguns logs disponíveis na janela de saída, mas você deve mudar para o Mac para logs mais completos e detalhados.


Depuração de bibliotecas de classes Mono

O Xamarin.iOS é enviado com o código-fonte para bibliotecas de classes Mono e você pode usar essa etapa única do depurador para ver tudo está funcionando nos bastidores.

Como esse recurso consome mais memória durante a depuração, ele está desligado por padrão.

Para habilitar esse recurso, verifique se somente a opção Depurar código do projeto; não entre na opção de código de estrutura está desmarcada no menu Visual Studio para Mac > Depurador de Preferências>, conforme ilustrado abaixo:

Depurando bibliotecas de classes do Mono

Depois de fazer isso, você pode iniciar o aplicativo e intervir em qualquer uma das bibliotecas de classes centrais do Mono.