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.
- Notions
- Questions
- Ranger et relier
- Les chiffres
- 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é.