console.log() és la funció més bàsica i popular per depurar JavaScript, però sovint subestimada en el seu potencial complet. Molts desenvolupadors només imprimeixen valors simples, però console.log pot mostrar objectes, arrays i fins i tot estilitzar sortides per millorar la lectura.
Per exemple, console.table() serveix per mostrar dades en format taula, facilitant la visualització de conjunts d’objectes complexos. També és possible afegir etiquetes i colors a la sortida amb %c per ajudar a diferenciar missatges.
Dominar aquesta funció incrementa notablement l’eficiència en la depuració bàsica. Aprendre a filtrar informació específica amb console.group i console.groupEnd ajuda a organitzar la sortida per seccions, fent més fàcil la interpretació (MDN Web Docs).
Les eines de desenvolupador del navegador, com Chrome DevTools, permeten establir breakpoints, punts on el codi s’atura per examinar l’estat de la aplicació. Molts desenvolupadors no aprofiten aquesta funcionalitat més enllà d’usar-la per un ús bàsic.
És possible posar breakpoints condicionalment perquè només s’aturi el codi quan es compleixi una condició específica, optimitzant el temps de depuració. També es poden posar breakpoints en esdeveniments o en la línia on s’executa una funció específica.
La profunditat d’inspecció que ofereixen aquestes eines permet explorar variables locals, l'estat de l’objecte this i la pila de crides, facilitant la identificació de bugs difícils de trobar sense aturades controlades (Google Developers).
La instrucció debugger pot inserir-se directament en el codi font per forçar l’aturada del programa quan s’apropi el navegador a aquesta línia. Tot i que sovint és ignorada, és una manera eficaç de controlar exactament on començar a investigar el problema.
Quan el navegador troba aquesta instrucció, si les eines de desenvolupador estan obertes, pausa la execució com si s’hagués col·locat un breakpoint. Això evita haver de buscar manualment la línia exacta.
És ideal per situacions en què el codi és massa complex o no es pot reproduir amb facilitat en un entorn de prova, ja que marca clarament punts d’interès per examinar l’estat de l’aplicació (MDN Web Docs).
Una part sovint oblidada de la depuració és el perfilatge del codi per optimitzar-lo. Les eines de desenvolupador permeten mesurar quant de temps ocupa cada funció o bloc de codi, identificant possibles colls d’ampolla.
El timeline i el profiler mostren exactament on el codi fa pauses, quines funcions es criden més i on es consumeix més memòria. Aquesta informació és essencial per millorar l’eficiència i evitar problemes de rendiment.
Utilitzar aquesta informació per ajustar l’algoritme o reestructurar la lògica de codi és fonamental per crear aplicacions JavaScript ràpides i escalables (Google Developers).
Molts errors de JavaScript es poden evitar amb eines de linting com ESLint. Aquestes validen sintaxi, convencions i certs tipus d’errors abans que el codi s’executi, ajudant a prevenir bugs.
Configurar aquestes eines en un procés d’integració contínua permet detectar fallades de qualitat abans que arribin a producció, reduint temps de depuració posterior.
A més a més, moltes IDEs i editors de codi integren linting en temps real, mostrant advertències i errades mentre s’escriu el codi (ESLint Documentation).
Els errors en codi asíncron, com promeses o async/await, són sovint més difícils de detectar. Molts desenvolupadors no aprofiten les tecnologies per traçar correctament aquests fluxos.
Una tècnica clau és afegir catch per capturar errors i utilitzar consoles o breakpoints dins de funcions asíncrones per entendre la seqüència d’execució i els resultats.
Els navegadors moderns també permeten veure la pila de crides asíncrona, fent més senzilla la depuració d’aquest tipus de funcions (MDN Web Docs).
Col·locar massa console.log pot saturar la sortida i dificultar trobar errors. Una tàctica que sovint es passa per alt és la d’usar logs condicionals, que activen missatges només quan es compleixin certs criteris.
Això es pot fer amb simples condicions if, o amb funcions personalitzades que arrenquin o aturin la depuració segons valors específics.
Aquest enfoc fa la depuració més clara i menys sorollosa, permetent concentrar-se només en casos problemàtics sense perdre informació vital (Stack Overflow discussions).
Existeixen múltiples extensions per a navegadors i IDEs que augmenten les possibilitats de depuració, moltes sovint desconegudes. Per exemple, Redux DevTools ajuda a depurar apps amb gestor d’estat Redux, mostrant cada canvi d’estat de manera interactiva.
Altres eines inclouen plugins per a l’anàlisi d’errors, visualització de fluxos i inspecció profunda del DOM vinculada al JavaScript. Aquestes ajuden a identificar errors contextuals més ràpidament.
Investigar i integrar aquestes extensions en el flux diari de treball pot accelerar molt la detecció i resolució d’errors complexos (Redux DevTools, VS Code Marketplace).
La depuració no només és arreglar errors, sinó prevenir-los. Molts desenvolupadors no aprofiten prou els testos unitari per comprovar la validesa del seu codi abans de la depuració manual.
Frameworks com Jest o Mocha permeten escriure proves específiques que verifiquen el comportament del codi, detectant regressions i errors abans que es manifestin en producció.
Tenir una cobertura adequada de tests unitari redueix el temps dedicat a buscar bugs i assegura que les funcionalitats es mantinguin inalterades durant canvis o millores (Jest Documentation).
La depuració sovint és més efectiva quan es fa en equip. La revisió de codi, una pràctica que es passa per alt en molts equips, aporta noves perspectives sobre errors potencials i millores.
Acceptar comentaris i tenir altres desenvolupadors revisant el codi ajuda a detectar problemes que poden passar desapercebuts quan es treballa aïlladament.
Aquesta pràctica també fomenta l’estandardització i l’optimització del codi, millorant la qualitat de l’aplicació a llarg termini (Atlassian Code Review Guide).