Anaïs Sparesotto
Debug · FrontendDébutant≈ 2h · 7 chapitres

Déboguer avec l'inspecteur du navigateur

Maîtriser les DevTools pour diagnostiquer un bug en quelques minutes au lieu de plusieurs heures. Breakpoints, Network, Console, Performance : ce qui sert vraiment au quotidien.

À la fin du cours, tu sais

  • Ouvrir et configurer les DevTools selon ton workflow
  • Inspecter et modifier le DOM et le CSS en live
  • Utiliser la Console au-delà de console.log
  • Poser des breakpoints (classiques, conditionnels, logpoints)
  • Diagnostiquer une requête réseau en lisant son détail
  • Auditer la perf et l'accessibilité d'une page

Prérequis

  • Connaître les bases HTML, CSS et JavaScript
  • Avoir Chrome, Edge ou Firefox installé

Chapitre 1

Ouvrir et apprivoiser les DevTools

Premier réflexe : savoir ouvrir, ancrer et configurer ton inspecteur pour qu'il colle à ta façon de bosser.

Les raccourcis à mémoriser

  • F12 ou Cmd+Option+I (Mac) / Ctrl+Shift+I (Windows/Linux) : ouvre les DevTools
  • Cmd+Shift+C / Ctrl+Shift+C : pour inspecter un élément précis directement
  • Cmd+Shift+M / Ctrl+Shift+M : bascule en mode responsive
  • Échap : ouvre/ferme le tiroir Console depuis n'importe quel panneau

Le Command Menu

Le raccourci le plus rentable des DevTools : Cmd+Shift+P / Ctrl+Shift+P. Tu tapes screenshot, disable JavaScript, coverage... Tu pilotes tout au clavier sans chercher dans les menus.

Ancrage des DevTools

À droite, en bas, ou détaché dans une fenêtre séparée (utile sur un grand écran). Bouton trois points en haut à droite des DevTools, puis Dock side.

Firefox aussi

Mêmes raccourcis, mêmes panneaux principaux (Inspecteur, Console, Réseau, Débogueur, Stockage). Si tu sais déboguer dans Chrome, tu sais déboguer dans Firefox.

Chapitre 2

Panneau Elements : inspecter et modifier en live

Le terrain de jeu HTML/CSS. Tu peux toucher à tout sans toucher au code source.

Manipuler le DOM

  • Double-clic sur un attribut pour l'éditer
  • Clic droit sur un élément → Edit as HTML pour modifier le markup
  • Faire glisser un élément dans l'arbre pour le déplacer
  • Touche Delete pour supprimer un nœud (test rapide)

Le panneau Styles

  • Ajouter une règle CSS en cliquant dans la zone (autocomplétion incluse)
  • Désactiver/activer une propriété en décochant la case
  • Forcer un état : :hover, :focus, :focus-visible, :active
  • Color picker avec ratio de contraste WCAG AA/AAA intégré

Flexbox et Grid debugger

Quand un élément est un conteneur Flex ou Grid, un badge flex ou grid apparaît à côté dans le DOM. Clique dessus : les lignes de la grille s'affichent en couleur sur la page. Indispensable pour comprendre un layout cassé.

Le raccourci $0

Sélectionne un élément dans Elements, puis bascule dans Console : tape $0. Tu as une référence directe à l'élément sélectionné. $0.classList.add('debug') pour le manipuler en JS, par exemple.

Chapitre 3

Console : bien plus que console.log

La Console reste l'outil le plus rentable, à condition d'aller au-delà de console.log.

Les méthodes vraiment utiles
// Tableau d'objets affiché en colonnes triables
console.table(users);

// Grouper des logs liés
console.group('Traitement commande');
console.log('Étape 1 : validation');
console.log('Étape 2 : paiement');
console.groupEnd();

// Mesurer une durée
console.time('chargement');
// ... du code ...
console.timeEnd('chargement');  // "chargement: 234ms"

// Log conditionnel sans casser le flux
console.assert(user.age >= 18, 'User trop jeune', user);

// Stack trace à un endroit précis (sans throw)
console.trace('passé par ici');

Live expressions

L'icône œil en haut de la Console : tu y mets une expression et tu la vois en temps réel. Exemple : document.activeElement pour suivre le focus pendant que tu navigues au clavier.

console.log oublié en prod

Les console.log oubliés dans le code de prod ralentissent (un peu) et fuitent (parfois) des infos sensibles. Configure ton lint pour les bloquer hors mode dev (eslint no-console).

Chapitre 4

Sources : breakpoints et pas-à-pas

Le vrai débogage commence ici. Pose des breakpoints, navigue dans la pile, inspecte les variables.

Poser un breakpoint

  • Clic sur le numéro de ligne pour un breakpoint classique
  • Clic droit → Add conditional breakpoint : ne s'arrête que si une condition est vraie
  • Clic droit → Add logpoint : log une valeur sans modifier le code, sans arrêter
  • Breakpoint sur exception : pause automatique sur toute erreur (case Pause on exceptions)

Le logpoint, ami invisible

Plutôt que de polluer ton code avec des console.log que tu vas oublier de retirer, utilise un logpoint : tu l'ajoutes dans les DevTools, il log à chaque passage, et il disparaît quand tu fermes l'onglet.

Les touches du pas-à-pas

  • F8 : Resume (continuer l'exécution)
  • F10 : Step over (passer à la ligne suivante sans entrer dans les fonctions)
  • F11 : Step into (entrer dans la fonction appelée)
  • Shift+F11 : Step out (sortir de la fonction courante)

Scope, Watch, Call Stack

  • Scope : toutes les variables visibles à l'arrêt courant
  • Watch : tu y ajoutes des expressions à suivre (user.email, cart.length)
  • Call Stack : la pile d'appels qui t'a amené ici, cliquable pour remonter

Breakpoints DOM

Clic droit sur un élément dans Elements → Break onsubtree modifications / attribute modifications / node removal. Le débogueur se déclenche dès que cet élément change. Magique pour traquer un JS tiers qui modifie ton DOM mystérieusement.

Chapitre 5

Network : voir passer chaque requête

Pour comprendre ce que ton front envoie et reçoit, et à quel coût.

Filtres essentiels

  • Boutons en haut : Fetch/XHR (les appels API), JS, CSS, Img, Doc
  • Filtre texte avancé : status-code:404, method:POST, domain:api.example.com
  • Preserve log coché : garde l'historique même quand tu navigues vers une autre page
  • Disable cache coché : utile en dev, à décocher en debug de prod

Détail d'une requête

  • Headers : ce qui a été envoyé (request) et reçu (response)
  • Payload : le corps de la requête (utile pour vérifier ce qui est envoyé)
  • Response : le corps de la réponse (souvent du JSON)
  • Timing : décomposition (DNS, TCP, TLS, request, response, download)
  • Initiator : qui a déclenché la requête (cliquable pour aller au code source)

Throttling : simuler la lenteur

Menu déroulant No throttling en haut → Slow 4G, Fast 3G, ou un profil custom. Indispensable pour tester ce que voit un·e utilisateur·ice sur une connexion mobile lente.

Copy as cURL ou fetch

Clic droit sur une requête → CopyCopy as cURL ou Copy as fetch. Tu peux rejouer la requête en terminal, dans Postman, ou dans un test. Gain de temps énorme quand tu cherches à reproduire un bug d'API.

Chapitre 6

Application : storage, cookies, service workers

Tout ce qui persiste côté navigateur. Souvent là que les bugs « ça marche en navigation privée mais pas chez moi » se règlent.

Storage

  • LocalStorage : persistant entre sessions, ~10 Mo
  • SessionStorage : effacé à la fermeture de l'onglet
  • IndexedDB : base de données structurée côté navigateur
  • Cache Storage : ressources mises en cache par un Service Worker

Cookies

Vérifier les flags critiques : HttpOnly (inaccessible en JS, mitige le XSS), Secure (HTTPS uniquement), SameSite (Strict/Lax/None, mitige le CSRF). Si tu vois un cookie d'authentification sans HttpOnly, c'est un signal d'alarme.

Service Workers

  • Liste des SW enregistrés, leur statut (installed, activated)
  • Update on reload : force la mise à jour à chaque reload (utile en dev)
  • Unregister : supprime un SW qui pose problème
  • Offline : simule la déconnexion (test du fallback)

Chapitre 7

Performance, accessibilité, Lighthouse

Aller au-delà du fonctionnel : ta page va-t-elle vite, est-elle accessible, est-elle scannée par Google ?

Panneau Performance

  • Bouton Record rouge, navigue dans ta page, Stop
  • Panneau Insights : LCP, INP, CLS (les Core Web Vitals)
  • Repère les Long tasks (rectangles rouges sur la timeline)
  • Compare avant/après une optimisation : visuel immédiat

Accessibility tree

Dans Elements, onglet Accessibility. Tu vois l'arbre tel que perçu par un lecteur d'écran : nom accessible, rôle, états ARIA calculés. Si le nom accessible est (empty) sur un bouton, tu as un problème.

Lighthouse en 1 clic

Onglet Lighthouse. Coche les audits voulus (Performance, Accessibility, Best Practices, SEO, PWA), bouton Analyze page load. En 30 secondes tu as un rapport avec des recos concrètes et priorisées.

Coverage : code mort

Via le Command Menu : Coverage. Tu navigues dans ta page, l'outil te dit quel pourcentage de chaque fichier JS/CSS est réellement utilisé. Excellent pour traquer le code mort à supprimer.

Issues

Panneau Issues : il centralise les warnings du navigateur (CSP, cookies tiers obsolètes, APIs dépréciées) avec des liens vers la doc. À regarder régulièrement, ça évite les mauvaises surprises lors d'une mise à jour de Chrome.

🛠️ Exercice optionnel

Déboguer un formulaire qui envoie la mauvaise donnée

Un formulaire de contact envoie systématiquement un champ email vide à l'API, alors que l'utilisateur·ice a bien saisi son adresse. Le bug est facile à voir, plus subtil à diagnostiquer.

Ta mission

  1. Ouvre l'onglet Network, filtre sur Fetch/XHR, soumets le formulaire.
  2. Inspecte la requête POST : regarde le Payload et confirme que email est vide.
  3. Bascule dans Sources, pose un breakpoint sur la fonction handleSubmit.
  4. Re-soumets le formulaire. Le débogueur s'arrête. Observe le panneau Scope : quelle propriété est lue ? Est-ce formData.email ou formData.mail ?
  5. Ajoute un logpoint pour confirmer la valeur de formData sans modifier le code.
  6. Corrige le nom de champ, relance, vérifie le Payload à nouveau dans Network.

Tu bloques ? Des indices, à dévoiler quand tu en as besoin.

Indice 1

Indice masqué.

Indice 2

Indice masqué.

Indice 3

Indice masqué.

✅ QCM de fin de cours

Teste tes acquis

10 questions, plusieurs réponses parfois possibles. Coche tout ce qui te semble juste, puis valide pour voir ton score et les explications.

  1. 1

    Quel raccourci ouvre les DevTools sur Mac ?

  2. 2

    À quoi sert console.table(data) ?

  3. 3

    À quoi sert un breakpoint conditionnel ?

  4. 4

    Quelle touche fait un step over dans le débogueur ?

  5. 5

    Comment simuler une connexion lente pour tester ton site ?

  6. 6

    Où vérifies-tu si un cookie est HttpOnly ?

  7. 7

    À quoi sert le panneau Issues ?

  8. 8

    Que fait $0 dans la Console ?

  9. 9

    Quel panneau te permet de mesurer le LCP et l'INP ?

  10. 10

    Comment rejouer une requête API depuis ton terminal sans réécrire toute la commande ?

Tu peux laisser des questions sans réponse, elles compteront comme fausses.

Tu veux ce cours pour ton équipe ?

Je peux adapter et animer ce cours pour tes formateur·ices ou tes apprenant·es, en présentiel ou en distanciel. Parlons-en pendant l'audit gratuit.

Réserver un audit gratuit →