Le débogage avancé

Traquer un bogue difficile avec méthode : hypothèses, exemple minimal reproductible, git bisect, point d'arrêt sur donnée, accès concurrents, fuite de mémoire, vidage des fils et du tas.

  • 26 cartes
  • 5 thèmes
  • Gratuit

Le programme, thème par thème

Le poids de chaque thème suit celui que lui donne l'examen.

  1. Notions
  2. Questions
  3. Ranger et relier
  4. Les chiffres
  5. Mises en situation

Quelques cartes du deck

  • Exemple minimal reproductible : de quoi s'agit-il ?

    Voir la réponse

    Plus petit programme qui provoque encore le bogue : tout ce qu'on peut retirer sans le faire disparaître l'a été.

    Chaque ligne retirée écarte des suspects. Il sert aussi de test de non-régression et se transmet sans le reste de l'application.

  • Le commit 1 est bon et le commit 16 est mauvais. Combien de commits faut-il tester au plus, avec git bisect, pour trouver le premier commit fautif ?

    • 4
    • 2
    • 8
    • 15
    Voir la réponse

    4

    Chaque essai divise l'intervalle par deux : 16, 8, 4, 2, 1. C'est log2(16) = 4. Tester les commits un par un en demanderait jusqu'à 15.

  • Pour automatiser la recherche, on lance … avec un script : un code de sortie … déclare le commit bon, et … le fait ignorer.

    Voir la réponse

    Pour automatiser la recherche, on lance git bisect run avec un script : un code de sortie 0 déclare le commit bon, et 125 le fait ignorer.

    Les codes de 1 à 127, sauf 125, déclarent le commit mauvais. Le 125 sert quand le commit ne compile pas et ne peut pas être jugé.

  • Point d'arrêt sur donnée : de quoi s'agit-il ?

    Voir la réponse

    Arrêt du programme déclenché dès qu'une variable ou une zone mémoire est modifiée, où que ce soit dans le code.

    On ne cherche plus la ligne fautive : on laisse le débogueur la désigner, même quand l'écriture vient d'un endroit inattendu, comme un pointeur égaré.