¿Cuál es la mejor manera de depurar JavaScript interactivo no trivial?

A veces solo tienes que usar console.log. 🙂

Entiendo totalmente el dilema: los eventos de mousemove son sensibles a la ubicación del cursor en este momento, y establecer puntos de interrupción y activar el depurador realmente alterará los datos de depuración. console.log () tampoco es completamente inmune a este efecto tipo Heisenburg: arroja demasiado a la consola, cambia el tiempo de ejecución del código y arruina la condición de carrera que intentaba recrear.

La mejor manera fuera del registro de algunas variables seleccionadas puede ser usar algo como jsfiddle.net o una página web de juguetes para aislar el problema y depurarlo, posiblemente agregando otra información en la página para ayudar a descubrir qué está sucediendo. Hace unas semanas tuve un error de renderizado de subpixel SVG bastante molesto; Mike Bostock (quien escribió d3, también estamos en el mismo equipo en Square) fue capaz de ayudarme construyendo una cuadrícula y probando el renderizado en diferentes navegadores para identificar lo que estaba sucediendo.

JavaScript no es fundamentalmente diferente de otro código cuando se trata de depuración, la gente simplemente piensa que es, por alguna razón. Si encuentra que está trabajando con un problema que es demasiado complejo, la forma de abordarlo es dividir el gran problema en problemas más pequeños .

Si su controlador de mousemove es largo y complejo, ¿quizás sus responsabilidades son demasiado grandes? ¿Quizás debería ser más pequeño y llamar a otras funciones? ¿Quizás su código no está estructurado de una manera fácil de seguir? ¿Quizás debería considerar usar un marco que ofrezca formas de componer mejor su código, como Ember.js?

Además, como otros han mencionado, prueba unitaria, prueba unitaria, prueba unitaria. No tiene idea de qué tan fácil y mejor es la codificación cuando tiene pruebas unitarias. Hace que sea mucho más fácil cazar errores y te obliga a estructurar tu código en pequeños trozos de responsabilidades.

Puede intentar integrar SessionStack (tiene un plan gratuito ) en su aplicación web. Entonces podrá ver toda la información de la consola, los errores de JavaScript, las solicitudes de red fallidas en una línea de tiempo combinada con una recreación del comportamiento del usuario en cada momento. Esto le permitirá ver el contexto completo: el estado del navegador y la información de la consola, lo que con suerte le ahorrará tiempo al depurar su JavaScript.
Tenga en cuenta que esto se puede aplicar para producción, depuración y siempre que lo encuentre útil.

Divulgación: soy cofundador de SessionStack