Skip to content

Most visited

Recently visited

navigation

Depure seu aplicativo

O Android Studio contém um depurador que permite depurar aplicativos executados no emulador do Android ou em um dispositivo Android conectado. O depurador do Android Studio depurador permite:

Para começar a depurar, clique em Debug na barra de ferramentas. O Android Studio compila um APK, o assina com uma chave de depuração, o instala no dispositivo selecionado e o executa e abra a janela Debug, conforme mostrado na figura 1. Ao adicionar código C e C++ ao seu projeto, o Android Studio também executará o depurador de LLDB na janela Debug para depurar seu código nativo.

Se nenhum dispositivo aparecer na janela Select Deployment Target depois de clicar em Debug, conecte um dispositivo ou clique em Create New Emulator para configurar o emulador do Android.

Figura 1. A janela do depurador, mostrando o thread atual e a árvore de objetos de uma variável.

Se o aplicativo já estiver em execução em um dispositivo conectado ou em um emulador, comece a depurar da seguinte maneira:

  1. Clique em Attach debugger to Android process .
  2. Na caixa de diálogo Choose Process, selecione o processo ao qual deseja conectar o depurador.

    Por padrão, o depurador mostra o dispositivo e o processo do aplicativo do projeto atual, além de qualquer dispositivo de hardware conectado ou dispositivo virtual presente no seu computador. Selecione Show all processes para mostrar todos os processos em todos os dispositivos; a exibição contém qualquer serviço criado por seu aplicativo e processos do sistema, por exemplo.

    No menu Debugger, você pode selecionar outro tipo de depuração. Por padrão, o Android Studio usa o tipo de depuração Auto para selecionar a melhor opção de depurador para você, com base na presença de código Java ou C/C++ em seu projeto.

  3. Clique em OK.

    É exibida a janela Debug. Nesse caso, observe as duas guias à direita do título da janela Debug: uma é para o código nativo e a outra para o código Java conforme indicado por -java.

    Sessões de depuração separadas têm guias separadas e diferentes números de portas, exibidos entre parênteses na guia.

  4. Para encerrar uma sessão de depuração, clique na guia da sessão e em Terminate .

Observação: o depurador e o coletor de lixo do Android Studio são relativamente integrados. A máquina virtual do Android garante que qualquer objeto que o depurador conheça não seja coletado até que o depurador seja desconectado. Isso pode resultar em um acúmulo de objetos ao longo do tempo enquanto o depurador estiver conectado. Por exemplo, se o depurador vir um thread em execução, o objeto Thread associado não é coletado mesmo depois que o thread for encerrado.

Tipos de depuração

Por padrão, o Android Studio usa o tipo de depuração Auto para decidir o depurador ou os depuradores a usar, por isso não é necessário alterar as configurações ao alternar entre a depuração do código Java e do código C/C++. Entretanto, pode-se criar ou editar uma configuração de depuração para personalizar certas configurações, como adicionar diretórios de símbolos ou comandos do LLDB ou mesmo usar um tipo de depuração diferente. Também é possível selecionar o tipo de depuração na lista suspensa Debugger localizada na caixa de diálogo Choose Process quando você conectar o depurador a um processo do Android em execução.

Os tipos de depuração disponíveis são:

Auto
Selecione esse tipo se quiser que o Android Studio escolha automaticamente a melhor opção para o código que você estiver depurando. Por exemplo: se seu projeto incluir código C ou C++, o Android Studio usará o tipo de depuração Hybrid automaticamente. Do contrário, o Android Studio usará o tipo de depuração Java.
Java
Selecione esse tipo se quiser depurar apenas o código Java — o depurador Java ignora qualquer ponto de interrupção ou controle definido no seu código nativo.
Native
Selecione esse tipo se quiser usar apenas o LLDB para depurar seu código. Ao usar esse tipo de depuração, a visualização da sessão do depurador Java não é disponibilizada. Por padrão, o LLDB inspeciona apenas seu código nativo e ignora os pontos de interrupção no seu código Java. Se também quiser depurar o código Java, utilize o tipo de depuração Auto ou Hybrid.
Hybrid
Selecione esse tipo para alternar entre depurar código Java e código nativo. O Android Studio conecta os depuradores Java e LLDB ao processo do seu aplicativo, assim você poderá inspecionar os pontos de interrupção no código Java e no código nativo sem reiniciar o aplicativo ou alterar a configuração de depuração.

Observação: o Android Studio oferece um recurso de depuração experimental de C++ que reconhece código Java e, portanto, permite que você depure pontos de interrupção Java e C/C++ usando um só processo de LLDB. Apesar desse recurso ainda estar sendo desenvolvido, você pode experimentá-lo no Android Studio 2.2 e em versões posteriores. Para saber mais, acesse o site de ferramentas do Android.

Use o registro do sistema

O registro do sistema mostra mensagens do sistema enquanto você depura seu aplicativo. Essas mensagens incluem informações sobre os aplicativos em execução no dispositivo. Se quiser usar o registro do sistema para depurar seu aplicativo, certifique-se de que seu código grave mensagens de registro e exiba o rastreamento de pilha para exceções enquanto seu aplicativo estiver na fase de desenvolvimento.

Grave mensagens de registro no seu código

Para gravar mensagens de registro no seu código, use a classe Log. Mensagens de registro ajudam você a entender o fluxo de execução coletando a saída de depuração do sistema enquanto você interage com seu aplicativo. Elas podem informar qual parte do seu aplicativo apresenta falhas. Para saber mais sobre registros, consulte Como ler e gravar registros.

O exemplo a seguir mostra como adicionar mensagens de registro para determinar se há informações de estado anterior disponíveis quando sua atividade for iniciada:

import android.util.Log;
...
public class MyActivity extends Activity {
    private static final String TAG = MyActivity.class.getSimpleName();
    ...
    @Override
    public void onCreate(Bundle savedInstanceState) {
        if (savedInstanceState != null) {
            Log.d(TAG, "onCreate() Restoring previous state");
            /* restore state */
        } else {
            Log.d(TAG, "onCreate() No saved state available");
            /* initialize app */
        }
    }
}

Durante o desenvolvimento, seu código também pode identificar exceções e gravar o rastreamento de pilha no registro do sistema:

void someOtherMethod() {
    try {
        ...
    } catch (SomeException e) {
        Log.d(TAG, "someOtherMethod()", e);
    }
}

Observação: remova as mensagens de registro de depuração e as chamadas de exibição de rastreamento de pilha do seu código quando estiver pronto para publicar o aplicativo. Isso pode ser feito ao definir um sinalizador DEBUG e inserir mensagens de registro de depuração em declarações condicionais.

Veja o registro do sistema

As janelas do Android DDMS (Dalvik Debug Monitor Server) e do Android Monitor mostram registros do sistema e qualquer processo específico do aplicativo. Para visualizar o registro do sistema na janela da ferramenta Android DDMS:

  1. Inicie seu aplicativo conforme descrito em Execute o aplicativo em modo de depuração.
  2. Clique em Android Monitor .
  3. Se o registro do sistema estiver vazio na vista Logcat, clique em Restart .

Figura 2. O registro do sistema na janela da ferramenta Android DDMS.

A janela de ferramenta Android DDMS concede acesso a alguns recursos do DDMS pelo Android Studio. Para saber mais sobre o DDMS, consulte Como usar o DDMS.

O registro do sistema mostra mensagens de serviços do Android e de outros aplicativos Android. Para filtrar as mensagens de registro para visualizar apenas as que interessam a você, use as ferramentas disponíveis na janela do Android DDMS:

Trabalhe com pontos de interrupção

O Android Studio oferece suporte a diversos tipos de pontos de interrupção que acionam diferentes ações de depuração. O tipo mais comum é um ponto de interrupção de linha que pausa a execução do seu aplicativo quando ele chega a uma linha de código especificada. Durante a pausa, você pode examinar variáveis, avaliar expressões e continuar a execução linha por linha para determinar as causas de erros de tempo de execução.

Para adicionar um ponto de interrupção de linha, faça o seguinte:

  1. Localize a linha de código na qual deseja pausar a execução e clique na margem esquerda dessa linha ou posicione o cursor na linha e pressione Ctrl+F8 (em computadores Mac, Command+F8).
  2. Se seu aplicativo já estiver em execução, não será preciso atualizá-lo para adicionar o ponto de interrupção — basta clicar em Attach debugger to Android proccess . Caso contrário, clique em Debug para iniciar a depuração.

Figura 3. Um ponto vermelho é exibido ao lado da linha depois de definir um ponto de interrupção.

Quando a execução do seu código atinge o ponto de interrupção, o Android Studio pausa a execução do aplicativo. Depois disso, é possível usar as ferramentas na guia Debugger para identificar o estado do aplicativo:

Se seu projeto usar código nativo, por padrão, o tipo de depuração Auto conecta o depurador Java e o LLDB ao seu aplicativo como dois processos separados, assim, você pode alternar entre inspecionar os pontos de interrupção Java e C/C++ sem reiniciar o aplicativo ou alterar as configurações.

Observação: para que o Android Studio detecte pontos de interrupção em seu código C ou C++, você deve usar um ponto de depuração que ofereça suporte ao LLDB, como Auto, Native ou Hybrid. Altere o tipo de depuração usado pelo Android Studio editando sua configuração de depuração. Para saber mais sobre os diferentes tipos de depuração, leia a seção sobre como usar outros tipos de depuração.

Quando o Android Studio implanta seu aplicativo no dispositivo de destino, a janela Debug é aberta com uma guia, ou com uma visualização de sessão de depuração, para cada processo de depuração, conforme é mostrado na figura 4.

Figura 4. Depuração do código nativo usando o LLDB.

  1. O Android Studio alterna automaticamente para a guia <your-module> quando o depurador do LLDB encontra um ponto de interrupção no seu código C/C++. Os painéis Frames, Variables e Watches também estão disponíveis e funcionam exatamente como funcionariam se você estivesse depurando código Java. Apesar de o painel Threads não estar disponível na visualização da sessão do LLDB, você pode acessar os processos do seu aplicativo usando a lista suspensa localizada no painel Frames. Saiba mais sobre esses painéis nas seções Depure frames de janela e Inspecione variáveis.

    Observação: ao inspecionar um ponto de interrupção no seu código nativo, o sistema Android suspende a máquina virtual que executa o bytecode Java do aplicativo. Isso significa que não será possível interagir com o depurador Java nem recuperar informações de estado da sessão de depuração Java ao inspecionar um ponto de interrupção no código nativo.

  2. O Android Studio automaticamente alterna para a guia <your-module>-java quando o depurador Java encontra um ponto de interrupção no código Java.
  3. Ao depurar com o LLDB, você pode usar o terminal do LLDB na visualização da sessão do LLDB para passar opções de linha de comando para o LLDB.

    Dica: se quiser que o LLDB execute comandos específicos sempre que você iniciar a depuração do seu aplicativo, imediatamente antes ou depois de conectar o depurador ao processo do seu aplicativo, você pode adicionar esses comandos à sua configuração de depuração.

Enquanto você depura o código C/C++, também é possível definir tipos especiais de pontos de interrupção, chamados pontos de controle, que podem suspender o processo do seu aplicativo quando ele interage com um bloco de memória específico. Para saber mais, leia a seção sobre como adicionar pontos de controle.

Veja e configure pontos de interrupção

Para ver todos os pontos de interrupção e definir suas configurações, clique em View Breakpoints no lado esquerdo da janela Debug. A janela Breakpoints é exibida, conforme mostrado na figura 5.

Figura 5. A janela Breakpoints lista todos os pontos de interrupção atuais e contém as configurações de comportamento para cada um.

A janela Breakpoints permite ativar ou desativar cada ponto de interrupção pela lista à esquerda. Se um ponto de interrupção for desativado, o Android Studio não pausará seu aplicativo quando ele o atingir. Selecione o ponto de interrupção na lista para definir suas configurações. Você pode configurar um ponto de interrupção para ser desativado inicialmente e fazer com que o sistema o ative após outro ponto de interrupção ser alcançado. Também é possível configurar se um ponto de interrupção deve ser desativado após ser alcançado. Para definir um ponto de interrupção para qualquer exceção, selecione Exception Breakpoints na lista de pontos de interrupção.

Depure frames de janela

Na janela Debugger, o painel Frames permite inspecionar o frame da pilha que fez com que o ponto de interrupção atual fosse alcançado. Assim, é possível navegar e examinar o frame da pilha e inspecionar a lista de threads no seu aplicativo Android. Para selecionar um thread, use a lista suspensa do seletor de threads e veja o frame da pilha. Um clique nos elementos do frame abre a origem no editor. Você também pode personalizar a apresentação do thread e exportar o frame da pilha conforme discutido no guia sobre frames de janela.

Inspecione variáveis

Na janela Debugger, o painel Variables permite inspecionar variáveis quando o sistema interrompe seu aplicativo em um ponto de interrupção e você seleciona um frame no painel Frames. O painel Variables também permite que você avalie expressões ad-hoc usando métodos e/ou variáveis disponíveis no frame selecionado.

O painel Watches oferece recursos semelhantes, exceto que as expressões adicionadas ao painel Watches persistem entre sessões de depuração. Você deve adicionar pontos de controle para variáveis e campos que acessa com frequência ou que oferecem estados úteis para a sessão de depuração atual. Os painéis Variables e Watches são exibidos conforme é mostrado na figura 5.

Para adicionar uma variável ou expressão à lista Watches, siga estas etapas:

  1. Inicie a depuração.
  2. No painel Watches, clique em Add .
  3. Na caixa de texto exibida, digite o nome da variável ou da expressão que você deseja controlar e pressione Enter.

Para remover um item da lista Watches, selecione-o e clique em Remove .

Para reordenar os elementos na lista Watches, selecione um item e clique em Up ou Down .

Figura 6. Os painéis Variables e Watches na janela Debugger.

Adicione pontos de controle

Durante a depuração do código C/C++, também é possível definir tipos especiais de pontos de interrupção, chamados pontos de controle, que podem suspender o processo do aplicativo quando ele interage com um bloco de memória específico. Por exemplo: se você definir dois ponteiros para um bloco de memória e atribuir-lhe um ponto de controle, o uso de qualquer um desses ponteiros para acessar esse bloco de memória acionará o ponto de controle.

No Android Studio, é possível selecionar uma variável específica para criar um ponto de controle durante o tempo de execução, mas o LLDB atribui o ponto de controle apenas para o bloco de memória que o sistema aloca para a variável, não para a variável em si. Isso é diferente de adicionar uma variável ao painel Watches, o que permite observar o valor de uma variável, mas não a suspensão do processo do aplicativo quando o sistema ler ou alterar seu valor na memória.

Observação: quando o aplicativo sai de uma função e o sistema desaloca as variáveis locais da memória, é necessário reatribuir qualquer ponto de controle criado para essas variáveis.

Para definir um ponto de controle, é preciso atender aos seguintes requisitos:

Se você atender aos requisitos acima, poderá adicionar um ponto de controle da seguinte maneira:

  1. Enquanto seu aplicativo estiver suspenso em um ponto de interrupção, acesse o painel Variables na vista da sua sessão do LLDB.
  2. Clique com o botão direito em uma variável que ocupe o bloco de memória que deseja rastrear e selecione Add Watchpoint. Será exibida uma caixa de diálogo para configurar seu ponto de controle, conforme mostrado na figura 7.

    Figura 7. Adicionando um ponto de controle a uma variável na memória.

  3. Configure seu ponto de controle com as seguintes opções:
    • Enabled: desmarque esta opção se quiser que o Android Studio ignore o ponto de controle por enquanto. O Android Studio ainda salvará seu ponto de controle para que seja possível acessá-lo posteriormente na sessão de depuração.
    • Suspend: por padrão, o sistema Android suspende o processo do seu aplicativo quando acessa um bloco de memória atribuído a um ponto de controle. Desmarque essa opção se não quiser que isso aconteça. Isso releva opções adicionais que podem ser úteis para personalizar o comportamento do sistema quando ele interage com um ponto de controle: Log message to console e Remove [the watchpoint] when hit.
    • Access Type: Selecione se seu aplicativo deve acionar seu ponto de controle quando tentar ler ou gravar no bloco de memória que o sistema alocar para a variável. Para acionar seu ponto de controle em uma ação de leitura ou de gravação, selecione Any.
  4. Clique em Done.

Para ver todos os pontos de controle e definir suas configurações, clique em View Watchpoints no lado esquerdo da janela Debug. É exibida a janela Breakpoints, conforme mostrado na figura 8.

Figura 8. A caixa de diálogo Breakpoints lista os pontos de controle atuais e contém as configurações de comportamento de cada um.

Depois de adicionar um ponto de controle, clique em Resume Program no lado esquerdo da janela Debug para retomar o processo do seu aplicativo. Por padrão, se o aplicativo tentar acessar um bloco de memória para o qual você atribuiu um ponto de controle, o sistema Android suspenderá o processo do aplicativo e um ícone de ponto de controle () será exibido ao lado da linha de código que seu aplicativo executou por último, conforme mostrado na figura 9.

Figura 9. O Android Studio indica alinha de código executada por seu aplicativo imediatamente antes do acionamento de um ponto de controle.

Rastreie a alocação de objetos

O Android Studio permite rastrear objetos que estão sendo alocados no heap Java e verificar quais classes e threads estão alocando esses objetos. Isso permite exibir uma lista dos objetos alocados durante determinado período. Essa informação é útil para avaliar o uso da memória, o que pode afetar o desempenho do seu aplicativo.

  1. Inicie o aplicativo conforme descrito em Execute o aplicativo em modo de depuração e selecione View > Tool Windows > Android Monitor (ou clique em Android Monitor na barra de janelas).
  2. Na janela Android Monitor, clique na guia Monitors.
  3. No topo da janela, selecione seu dispositivo e o processo do aplicativo nas listas suspensas.
  4. No painel Memory, clique em Start Allocation Tracking .
  5. Interaja com seu aplicativo no dispositivo.
  6. Clique no mesmo botão novamente para interromper o rastreamento da alocação.

O Android Monitor exibe informações sobre a memória, a CPU, a GPU e o uso de rede do aplicativo. Consulte Conceitos básicos sobre o Android Monitor para saber como usar o Android Monitor. Consulte também a Visão geral do Android Monitor para obter uma introdução sobre os recursos do Android Monitor, que contém um catálogo de registros (logcat), monitores de desempenho, ferramentas de análise de dados e ferramentas de captura de tela e vídeo.

Figura 10. Rastreamento de alocação de objetos no Android Studio.

Veja e altere o formato de exibição dos valores de recursos

No modo de depuração, é possível ver os valores dos recursos e selecionar um formato de exibição diferente. Com a guia Variables exibida e um frame selecionado, faça o seguinte:

  1. Na lista Variables, clique com o botão direito em qualquer local de uma linha de recurso para exibir a lista suspensa.
  2. Na lista suspensa, selecione View as e o formato que deseja usar.

    Os formatos disponíveis dependem do tipo de dados do recurso selecionado. Você poderá ver qualquer uma ou mais das seguintes opções:

    • Class: exibe a definição de classe.
    • toString: exibe o formato de string.
    • Object: exibe a definição de objeto (uma instância de uma classe).
    • Array: exibe em um formato de matriz.
    • Timestamp: exiba a data e a hora no seguinte formato: aaaa-mm-dd hh:mm:ss.
    • Auto: o Android Studio escolhe o melhor formato com base no tipo de dados.
    • Binary: exibe um valor binário usando 0 e 1.
    • MeasureSpec: o valor passado do pai para o filho selecionado. Consulte MeasureSpec.
    • Hex: exibe como um valor hexadecimal.
    • Primitive: exibe como um valor numérico usando um tipo de dados primitivo.
    • Integer: exibe um valor numérico do tipo Integer.

Você pode criar um formato personalizado (renderizador de tipo de dados) da seguinte maneira:

  1. Clique no valor do recurso com o botão direito do mouse.
  2. Selecione View as.
  3. Selecione Create. A caixa de diálogo Java Data Type Renderers é exibida.
  4. Siga as instruções em Renderizadores de tipos de dados Java.

Analise as métricas do tempo de execução para otimizar seu aplicativo

Mesmo que seu aplicativo não gere erros de tempo de execução, isso não significa que ele não tem problemas. Considere o seguinte:

O Android Device Monitor é uma ferramenta independente com uma interface gráfica do usuário para diversas ferramentas de análise e depuração de aplicativos Android, inclusive o Dalvik Debug Monitor Server (DDMS). O Android Device Monitor pode analisar o uso da memória, criar perfis de métodos, monitorar o tráfego de rede e simular o recebimento de chamadas telefônicas e mensagens.

Para abrir o Android Device Monitor pelo Android Studio, clique em Monitor na barra de ferramentas. O Android Device Monitor abre em uma nova janela.

Para saber mais sobre o Android Device Monitor e o DDMS, consulte Device Monitor e Como usar o DDMS.

Gere capturas de tela e vídeos

O Android Studio permite gerar uma captura de tela ou um vídeo curto da tela do dispositivo enquanto seu aplicativo está em execução. Capturas de tela e vídeos são úteis como materiais promocionais para seu aplicativo, e você também pode anexá-los a relatórios de bugs enviados para sua equipe de desenvolvimento.

Para capturar uma tela do seu aplicativo:

  1. Inicie seu aplicativo conforme descrito em Execute o aplicativo em modo de depuração.
  2. Clique em Android Monitor .
  3. Clique em Screen Capture à esquerda.
  4. Opcional: Para adicionar um frame de dispositivo à sua captura de tela, clique em Frame screenshot.
  5. Clique em Save.

Para gravar um vídeo do seu aplicativo:

  1. Inicie seu aplicativo conforme descrito em Execute o aplicativo em modo de depuração.
  2. Clique em Android Monitor .
  3. Clique em Screen Record à esquerda.
  4. Clique em Start Recording.
  5. Interaja com o aplicativo.
  6. Clique em Stop Recording.
  7. Insira um nome para o arquivo da gravação e clique em OK.
This site uses cookies to store your preferences for site-specific language and display options.

Get the latest Android developer news and tips that will help you find success on Google Play.

* Required Fields

Hooray!

Follow Google Developers on WeChat

Browse this site in ?

You requested a page in , but your language preference for this site is .

Would you like to change your language preference and browse this site in ? If you want to change your language preference later, use the language menu at the bottom of each page.

This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read Supporting Different Platform Versions.

Take a short survey?
Help us improve the Android developer experience.
(Sep 2017 survey)