Técnicas de depuración usadas en el navegador
(alan.norbauer.com)Consejos para aprovechar el depurador del navegador
-
Puntos de interrupción condicionales avanzados
- Amplía la funcionalidad de los puntos de interrupción condicionales usando expresiones con efectos secundarios
- Con logpoints/tracepoints puedes registrar mensajes en la consola sin detener la ejecución
- Usa
console.countpara contar cuántas veces se ejecuta - Los navegadores principales soportan logpoints/tracepoints (a mayo de 2020)
-
Uso del panel de vigilancia
- Se puede usar
console.logen el panel de vigilancia - Para ejecutar expresiones cuando cambie el DOM, configura un punto de interrupción por cambios en el DOM y luego agrega una expresión de vigilancia
- Se puede usar
-
Seguimiento de la pila de llamadas
- Rastrea la pila de llamadas de funciones para encontrar llamadas que no coinciden
- Usa
console.traceen un punto de interrupción condicional para revisar la pila de llamadas
-
Cambiar el comportamiento del programa
- Es posible modificar al vuelo el comportamiento del programa dentro del navegador
- Sobrescribe parámetros de funciones para ajustar el comportamiento
-
Perfilado simple de rendimiento
- Usa la API de temporización de la consola para medir el tiempo de ejecución del código
- Mide el tiempo con
console.time('label')yconsole.timeEnd('label')
-
Aprovechar la aridad de las funciones
- Activa un punto de interrupción solo cuando se llame con una cantidad específica de argumentos
- Úsalo para encontrar discrepancias en la cantidad de argumentos al invocar funciones
-
Aprovechar el tiempo
- Activa un punto de interrupción solo después de que haya pasado cierto tiempo desde la carga de la página
- Omite puntos de interrupción durante un tiempo específico y actívalos solo después
-
Uso de CSS
- Activa puntos de interrupción con base en valores calculados de CSS
-
Pausar solo en llamadas pares
- Activa un punto de interrupción solo en ejecuciones pares
-
Pausar mediante muestreo
- Activa un punto de interrupción solo para muestras aleatorias de la ejecución
-
No pausar en una línea específica
- Usa la opción "Never Pause Here" para evitar que se detenga en una línea concreta
-
Asignación automática de ID de instancia
- Asigna automáticamente un ID único a cada instancia de una clase
-
Alternar programáticamente
- Usa un booleano global para activar o desactivar programáticamente un punto de interrupción condicional
-
Llamadas de clase con
monitor()- Usa el comando
monitorde Chrome para rastrear llamadas a métodos de clase
- Usa el comando
-
Llamadas a funciones y depuración
- Llama a una función después de invocar
debuggerdesde la consola para depurarla
- Llama a una función después de invocar
-
Pausar cuando cambia la URL
- En una aplicación de una sola página, pausa la ejecución antes de que cambie la URL
-
Depuración de lectura de propiedades
- Activa un punto de interrupción cada vez que se lea una propiedad de un objeto
-
Uso de
copy()- Usa la API de consola
copy()para copiar información directamente al portapapeles desde el navegador
- Usa la API de consola
-
Depuración de HTML/CSS
- Usa la consola de JS para diagnosticar problemas de HTML/CSS
- Inspecciona el DOM con JS desactivado
- Inspecciona elementos del DOM que aparecen de forma condicional
- Registra instantáneas del DOM
- Monitorea el elemento que tiene el foco
- Encuentra elementos con texto en negritas
- Consulta el elemento actualmente seleccionado
- Monitorea eventos
Opinión de GN⁺
Lo más importante de este texto es que ofrece varias técnicas y consejos para que los desarrolladores usen el depurador del navegador de forma más eficiente al depurar código y resolver problemas. Esta información es muy útil para desarrolladores de software y resulta especialmente interesante porque puede ahorrar tiempo al rastrear bugs complejos o resolver problemas de rendimiento.
1 comentarios
Comentarios de Hacker News
Evolución de las herramientas de depuración integradas del navegador
Uso de la sentencia
debuggerdebugger;es la única forma de vencer la pila recursiva del depurador de Chrome.Dificultades para depurar backend en NodeJS
pdb.set_trace()/IEx.pry().console.log, lo que se sintió muy primitivo.Recomendación de Werkzeug
Cómo acceder a variables locales de un IIFE
Método de depuración a través de cadenas de texto de la UI
debugger.Depuración con puntos de interrupción condicionales
{configOption: true}en{get configOption() { debugger; return true; }}.Función exclusiva de Chrome: 'Monitor Events for Element'
Ausencia de la API
queryObjectsqueryObjects, que devuelve una lista de todos los objetos creados por un constructor específico.queryObjects(Function)para obtener una lista de todas las funciones en el heap.Dificultad para usar variables observadas