Técnicas de depuração usadas no navegador
(alan.norbauer.com)Dicas para aproveitar o depurador do navegador
-
Pontos de interrupção condicionais avançados
- Expandir a funcionalidade dos pontos de interrupção condicionais usando expressões com efeitos colaterais
- Registrar logs no console sem interromper a execução por meio de logpoints/tracepoints
- Usar
console.countpara contar o número de execuções - Os principais navegadores oferecem suporte a logpoints/tracepoints (em maio de 2020)
-
Uso da janela de observação
- É possível usar
console.logna janela de observação - Definir um ponto de interrupção em mudanças do DOM e adicionar uma expressão de observação para executar uma expressão no momento em que o DOM mudar
- É possível usar
-
Rastreamento da pilha de chamadas
- Rastrear a pilha de chamadas de funções para encontrar chamadas inconsistentes
- Usar
console.traceem um ponto de interrupção condicional para verificar a pilha de chamadas
-
Alteração do comportamento do programa
- É possível alterar o comportamento do programa na hora, dentro do navegador
- Sobrescrever parâmetros de função para ajustar o comportamento
-
Profiling simples de desempenho
- Medir o tempo de execução do código usando a API de temporização do console
- Medir tempo com
console.time('label')econsole.timeEnd('label')
-
Aproveitando a aridade de função
- Ativar o ponto de interrupção apenas quando for chamado com um número específico de argumentos
- Usar isso para encontrar incompatibilidades na quantidade de argumentos em chamadas de função
-
Aproveitando o tempo
- Ativar o ponto de interrupção apenas depois que um certo tempo tiver passado após o carregamento da página
- Ignorar o ponto de interrupção por um período específico e ativá-lo somente depois disso
-
Aproveitando CSS
- Ativar o ponto de interrupção com base em valores calculados de CSS
-
Interromper apenas em chamadas pares
- Ativar o ponto de interrupção apenas na execução de número par
-
Interromper por amostragem
- Ativar o ponto de interrupção apenas para uma amostra aleatória das execuções
-
Não interromper em uma linha específica
- Usar a opção "Never Pause Here" para evitar interrupção em uma linha específica
-
Atribuição automática de ID de instância
- Atribuir automaticamente um ID único a cada instância de classe
-
Alternância programática
- Alternar pontos de interrupção condicionais de forma programática usando um booleano global
-
Chamadas de classe com
monitor()- Usar o comando
monitordo Chrome para rastrear chamadas de métodos de classe
- Usar o comando
-
Chamadas de função e depuração
- Chamar
debuggerno console e então invocar a função para depurá-la
- Chamar
-
Interromper a execução em mudanças de URL
- Interromper a execução antes de uma mudança de URL em aplicações de página única
-
Depuração de leitura de propriedades
- Ativar o ponto de interrupção sempre que uma propriedade de um objeto for lida
-
Uso de
copy()- Usar a API de console
copy()para copiar informações diretamente do navegador para a área de transferência
- Usar a API de console
-
Depuração de HTML/CSS
- Usar o console JS para diagnosticar problemas de HTML/CSS
- Inspecionar o DOM com o JS desativado
- Inspecionar elementos do DOM que aparecem condicionalmente
- Registrar snapshots do DOM
- Monitorar o elemento em foco
- Encontrar elementos em negrito
- Referenciar o elemento atualmente selecionado
- Monitorar eventos
Opinião do GN⁺
O mais importante neste texto é que ele apresenta várias técnicas e dicas para que desenvolvedores usem o depurador do navegador de forma mais eficiente ao depurar código e resolver problemas. Essas informações são muito úteis para desenvolvedores de software e são especialmente interessantes porque podem economizar tempo ao rastrear bugs complexos ou resolver problemas de desempenho.
1 comentários
Comentários do Hacker News
Evolução das ferramentas de depuração integradas ao navegador
Uso da instrução
debuggerdebugger;é a única forma de vencer a pilha recursiva do depurador do Chrome.Dificuldades para depurar backend em NodeJS
pdb.set_trace()/IEx.pry().console.log, o que pareceu algo primitivo.Recomendação do Werkzeug
Como acessar variáveis locais de uma IIFE
Método de depuração por meio de strings da UI
Depuração com breakpoint condicional
{configOption: true}em{get configOption() { debugger; return true; }}.Recurso exclusivo do Chrome: 'Monitor Events for Element'
Ausência da API
queryObjectsqueryObjects, que retorna uma lista de todos os objetos criados por um construtor específico.queryObjects(Function)pode ser usado para obter uma lista de todas as funções no heap.Dificuldade de uso de watch variables